squads 0.1.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.
Files changed (85) hide show
  1. package/dist/commands/add.d.ts +3 -0
  2. package/dist/commands/add.d.ts.map +1 -0
  3. package/dist/commands/add.js +98 -0
  4. package/dist/commands/add.js.map +1 -0
  5. package/dist/commands/check.d.ts +3 -0
  6. package/dist/commands/check.d.ts.map +1 -0
  7. package/dist/commands/check.js +127 -0
  8. package/dist/commands/check.js.map +1 -0
  9. package/dist/commands/find.d.ts +3 -0
  10. package/dist/commands/find.d.ts.map +1 -0
  11. package/dist/commands/find.js +84 -0
  12. package/dist/commands/find.js.map +1 -0
  13. package/dist/commands/init.d.ts +3 -0
  14. package/dist/commands/init.d.ts.map +1 -0
  15. package/dist/commands/init.js +281 -0
  16. package/dist/commands/init.js.map +1 -0
  17. package/dist/commands/list.d.ts +3 -0
  18. package/dist/commands/list.d.ts.map +1 -0
  19. package/dist/commands/list.js +49 -0
  20. package/dist/commands/list.js.map +1 -0
  21. package/dist/commands/login.d.ts +3 -0
  22. package/dist/commands/login.d.ts.map +1 -0
  23. package/dist/commands/login.js +129 -0
  24. package/dist/commands/login.js.map +1 -0
  25. package/dist/commands/publish.d.ts +3 -0
  26. package/dist/commands/publish.d.ts.map +1 -0
  27. package/dist/commands/publish.js +118 -0
  28. package/dist/commands/publish.js.map +1 -0
  29. package/dist/commands/remove.d.ts +3 -0
  30. package/dist/commands/remove.d.ts.map +1 -0
  31. package/dist/commands/remove.js +67 -0
  32. package/dist/commands/remove.js.map +1 -0
  33. package/dist/commands/update.d.ts +3 -0
  34. package/dist/commands/update.d.ts.map +1 -0
  35. package/dist/commands/update.js +58 -0
  36. package/dist/commands/update.js.map +1 -0
  37. package/dist/commands/validate.d.ts +3 -0
  38. package/dist/commands/validate.d.ts.map +1 -0
  39. package/dist/commands/validate.js +116 -0
  40. package/dist/commands/validate.js.map +1 -0
  41. package/dist/index.d.ts +3 -0
  42. package/dist/index.d.ts.map +1 -0
  43. package/dist/index.js +48 -0
  44. package/dist/index.js.map +1 -0
  45. package/dist/lib/agents.d.ts +26 -0
  46. package/dist/lib/agents.d.ts.map +1 -0
  47. package/dist/lib/agents.js +87 -0
  48. package/dist/lib/agents.js.map +1 -0
  49. package/dist/lib/config.d.ts +9 -0
  50. package/dist/lib/config.d.ts.map +1 -0
  51. package/dist/lib/config.js +44 -0
  52. package/dist/lib/config.js.map +1 -0
  53. package/dist/lib/installer.d.ts +29 -0
  54. package/dist/lib/installer.d.ts.map +1 -0
  55. package/dist/lib/installer.js +124 -0
  56. package/dist/lib/installer.js.map +1 -0
  57. package/dist/lib/lock-file.d.ts +11 -0
  58. package/dist/lib/lock-file.d.ts.map +1 -0
  59. package/dist/lib/lock-file.js +72 -0
  60. package/dist/lib/lock-file.js.map +1 -0
  61. package/dist/lib/sources/github.d.ts +26 -0
  62. package/dist/lib/sources/github.d.ts.map +1 -0
  63. package/dist/lib/sources/github.js +182 -0
  64. package/dist/lib/sources/github.js.map +1 -0
  65. package/dist/lib/sources/local.d.ts +15 -0
  66. package/dist/lib/sources/local.d.ts.map +1 -0
  67. package/dist/lib/sources/local.js +52 -0
  68. package/dist/lib/sources/local.js.map +1 -0
  69. package/dist/lib/sources/registry.d.ts +21 -0
  70. package/dist/lib/sources/registry.d.ts.map +1 -0
  71. package/dist/lib/sources/registry.js +63 -0
  72. package/dist/lib/sources/registry.js.map +1 -0
  73. package/dist/lib/telemetry.d.ts +6 -0
  74. package/dist/lib/telemetry.d.ts.map +1 -0
  75. package/dist/lib/telemetry.js +68 -0
  76. package/dist/lib/telemetry.js.map +1 -0
  77. package/dist/lib/validator.d.ts +29 -0
  78. package/dist/lib/validator.d.ts.map +1 -0
  79. package/dist/lib/validator.js +107 -0
  80. package/dist/lib/validator.js.map +1 -0
  81. package/dist/types.d.ts +86 -0
  82. package/dist/types.d.ts.map +1 -0
  83. package/dist/types.js +2 -0
  84. package/dist/types.js.map +1 -0
  85. package/package.json +47 -0
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function createAddCommand(): Command;
3
+ //# sourceMappingURL=add.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6BpC,wBAAgB,gBAAgB,IAAI,OAAO,CA+F1C"}
@@ -0,0 +1,98 @@
1
+ import { Command } from "commander";
2
+ import chalk from "chalk";
3
+ import ora from "ora";
4
+ import prompts from "prompts";
5
+ import { parseGitHubSource } from "../lib/sources/github.js";
6
+ import { isLocalPath, parseLocalSource } from "../lib/sources/local.js";
7
+ import { isRegistrySlug, resolveRegistrySource } from "../lib/sources/registry.js";
8
+ import { installSquad } from "../lib/installer.js";
9
+ /**
10
+ * Parse the source argument into a SquadSource object.
11
+ */
12
+ function resolveSource(input) {
13
+ if (isLocalPath(input)) {
14
+ return parseLocalSource(input);
15
+ }
16
+ if (isRegistrySlug(input)) {
17
+ return {
18
+ type: "registry",
19
+ squad: input,
20
+ };
21
+ }
22
+ // Default: treat as GitHub source
23
+ return parseGitHubSource(input);
24
+ }
25
+ export function createAddCommand() {
26
+ const cmd = new Command("add")
27
+ .description("Install a squad from GitHub, local path, or registry")
28
+ .argument("<source>", "Squad source (owner/repo, local path, or registry slug)")
29
+ .option("--skill <name>", "Install a specific squad from a multi-squad repo")
30
+ .option("-a, --agent <name>", "Install a specific agent only")
31
+ .option("-g, --global", "Install globally to ~/.squads/global/")
32
+ .option("-y, --yes", "Skip confirmation prompt")
33
+ .action(async (sourceArg, options) => {
34
+ const source = resolveSource(sourceArg);
35
+ // If --skill specified, set the squad path
36
+ if (options.skill) {
37
+ source.squad = options.skill;
38
+ }
39
+ // If registry type, resolve first to get actual source info
40
+ if (source.type === "registry") {
41
+ const spinner = ora("Resolving from squads.sh registry...").start();
42
+ try {
43
+ const resolved = await resolveRegistrySource(source.squad || sourceArg);
44
+ Object.assign(source, resolved);
45
+ spinner.succeed(`Found ${chalk.cyan(sourceArg)} at ${chalk.dim(`${resolved.owner}/${resolved.repo}`)}`);
46
+ }
47
+ catch (err) {
48
+ spinner.fail(chalk.red(err.message));
49
+ process.exit(1);
50
+ }
51
+ }
52
+ // Confirmation prompt
53
+ if (!options.yes) {
54
+ const sourceLabel = source.type === "local"
55
+ ? source.path
56
+ : source.owner && source.repo
57
+ ? `${source.owner}/${source.repo}${source.squad ? `/${source.squad}` : ""}`
58
+ : sourceArg;
59
+ const { confirmed } = await prompts({
60
+ type: "confirm",
61
+ name: "confirmed",
62
+ message: `Install squad from ${chalk.cyan(sourceLabel)}${options.global ? chalk.yellow(" (global)") : ""}?`,
63
+ initial: true,
64
+ });
65
+ if (!confirmed) {
66
+ console.log(chalk.dim("Installation cancelled."));
67
+ return;
68
+ }
69
+ }
70
+ const spinner = ora("Installing squad...").start();
71
+ try {
72
+ const result = await installSquad({
73
+ source,
74
+ projectDir: process.cwd(),
75
+ specificAgent: options.agent,
76
+ global: options.global,
77
+ skipConfirmation: options.yes,
78
+ });
79
+ spinner.succeed(chalk.green(`Installed ${chalk.bold(result.squadName)} v${result.version}`));
80
+ // Show installed agents
81
+ if (result.agents.length > 0) {
82
+ console.log();
83
+ console.log(chalk.dim(" Agents installed:"));
84
+ for (const agent of result.agents) {
85
+ console.log(` ${chalk.cyan(">")} ${agent}`);
86
+ }
87
+ }
88
+ console.log();
89
+ console.log(chalk.dim(` Squad location: ${result.squadDir}`));
90
+ }
91
+ catch (err) {
92
+ spinner.fail(chalk.red(err.message));
93
+ process.exit(1);
94
+ }
95
+ });
96
+ return cmd;
97
+ }
98
+ //# sourceMappingURL=add.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function createCheckCommand(): Command;
3
+ //# sourceMappingURL=check.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoEpC,wBAAgB,kBAAkB,IAAI,OAAO,CAuF5C"}
@@ -0,0 +1,127 @@
1
+ import { Command } from "commander";
2
+ import chalk from "chalk";
3
+ import ora from "ora";
4
+ import { readLockFile } from "../lib/lock-file.js";
5
+ /**
6
+ * Check the current tree SHA of a GitHub repository.
7
+ */
8
+ async function getRemoteSha(owner, repo, branch) {
9
+ try {
10
+ const repoUrl = `https://api.github.com/repos/${owner}/${repo}`;
11
+ let ref = branch;
12
+ if (!ref) {
13
+ const repoRes = await fetch(repoUrl, {
14
+ headers: { Accept: "application/vnd.github.v3+json" },
15
+ });
16
+ if (!repoRes.ok)
17
+ return null;
18
+ const repoData = (await repoRes.json());
19
+ ref = repoData.default_branch;
20
+ }
21
+ const treeUrl = `${repoUrl}/git/trees/${ref}`;
22
+ const treeRes = await fetch(treeUrl, {
23
+ headers: { Accept: "application/vnd.github.v3+json" },
24
+ });
25
+ if (!treeRes.ok)
26
+ return null;
27
+ const data = (await treeRes.json());
28
+ return data.sha;
29
+ }
30
+ catch {
31
+ return null;
32
+ }
33
+ }
34
+ /**
35
+ * Parse a source string to extract owner/repo.
36
+ */
37
+ function parseSourceForCheck(source) {
38
+ // Handle registry:slug format
39
+ if (source.startsWith("registry:"))
40
+ return null;
41
+ // Handle local paths
42
+ if (source.startsWith("/") || source.startsWith("./"))
43
+ return null;
44
+ // Parse owner/repo[/path][#branch]
45
+ let rest = source;
46
+ let branch;
47
+ const hashIdx = source.indexOf("#");
48
+ if (hashIdx !== -1) {
49
+ branch = source.slice(hashIdx + 1);
50
+ rest = source.slice(0, hashIdx);
51
+ }
52
+ const parts = rest.split("/");
53
+ if (parts.length < 2)
54
+ return null;
55
+ return {
56
+ owner: parts[0],
57
+ repo: parts[1],
58
+ branch,
59
+ };
60
+ }
61
+ export function createCheckCommand() {
62
+ const cmd = new Command("check")
63
+ .description("Check installed squads for available updates")
64
+ .action(async () => {
65
+ const lockFile = await readLockFile(process.cwd());
66
+ const entries = Object.entries(lockFile.squads);
67
+ if (entries.length === 0) {
68
+ console.log(chalk.dim("No squads installed."));
69
+ return;
70
+ }
71
+ const spinner = ora("Checking for updates...").start();
72
+ const updates = [];
73
+ const upToDate = [];
74
+ const skipped = [];
75
+ for (const [name, entry] of entries) {
76
+ const parsed = parseSourceForCheck(entry.source);
77
+ if (!parsed) {
78
+ skipped.push({ name, reason: "non-GitHub source" });
79
+ continue;
80
+ }
81
+ const remoteSha = await getRemoteSha(parsed.owner, parsed.repo, parsed.branch);
82
+ if (remoteSha === null) {
83
+ skipped.push({ name, reason: "could not reach repository" });
84
+ continue;
85
+ }
86
+ // Compare SHA (rough heuristic: if remote SHA differs from stored hash,
87
+ // there might be updates)
88
+ if (remoteSha !== entry.hash) {
89
+ updates.push({
90
+ name,
91
+ source: entry.source,
92
+ current: entry.version,
93
+ });
94
+ }
95
+ else {
96
+ upToDate.push(name);
97
+ }
98
+ }
99
+ spinner.stop();
100
+ if (updates.length > 0) {
101
+ console.log(chalk.bold("\n Updates available:\n"));
102
+ for (const u of updates) {
103
+ console.log(` ${chalk.cyan(u.name)} ${chalk.dim(`v${u.current}`)} ${chalk.yellow("-> update available")}`);
104
+ console.log(chalk.dim(` source: ${u.source}`));
105
+ }
106
+ console.log();
107
+ console.log(chalk.dim(" Run: squads update [squad-name] to update"));
108
+ }
109
+ else {
110
+ console.log(chalk.green("\n All squads are up to date."));
111
+ }
112
+ if (upToDate.length > 0) {
113
+ console.log();
114
+ console.log(chalk.dim(` Up to date: ${upToDate.join(", ")}`));
115
+ }
116
+ if (skipped.length > 0) {
117
+ console.log();
118
+ console.log(chalk.dim(" Skipped:"));
119
+ for (const s of skipped) {
120
+ console.log(chalk.dim(` ${s.name} (${s.reason})`));
121
+ }
122
+ }
123
+ console.log();
124
+ });
125
+ return cmd;
126
+ }
127
+ //# sourceMappingURL=check.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function createFindCommand(): Command;
3
+ //# sourceMappingURL=find.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../../src/commands/find.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgCpC,wBAAgB,iBAAiB,IAAI,OAAO,CAkF3C"}
@@ -0,0 +1,84 @@
1
+ import { Command } from "commander";
2
+ import chalk from "chalk";
3
+ import ora from "ora";
4
+ import { searchRegistry } from "../lib/sources/registry.js";
5
+ import { trackFind } from "../lib/telemetry.js";
6
+ /**
7
+ * Format a number with K/M suffix for compact display.
8
+ */
9
+ function formatCount(n) {
10
+ if (n >= 1_000_000)
11
+ return `${(n / 1_000_000).toFixed(1)}M`;
12
+ if (n >= 1_000)
13
+ return `${(n / 1_000).toFixed(1)}K`;
14
+ return String(n);
15
+ }
16
+ /**
17
+ * Render stars as a visual bar (0-5 scale).
18
+ */
19
+ function renderStars(avg) {
20
+ const filled = Math.round(avg);
21
+ const empty = 5 - filled;
22
+ return chalk.yellow("*".repeat(filled)) + chalk.dim("*".repeat(empty));
23
+ }
24
+ /**
25
+ * Truncate a string to a max length, adding ellipsis if needed.
26
+ */
27
+ function truncate(str, max) {
28
+ if (str.length <= max)
29
+ return str;
30
+ return str.slice(0, max - 1) + "\u2026";
31
+ }
32
+ export function createFindCommand() {
33
+ const cmd = new Command("find")
34
+ .description("Search for squads on squads.sh")
35
+ .argument("[query]", "Search query")
36
+ .option("-l, --limit <n>", "Max results to show", "20")
37
+ .action(async (query, options) => {
38
+ if (!query) {
39
+ console.log(chalk.yellow("Usage: squads find <query>"));
40
+ console.log();
41
+ console.log(chalk.dim("Examples:"));
42
+ console.log(chalk.dim(" squads find design-system"));
43
+ console.log(chalk.dim(" squads find code-review"));
44
+ console.log(chalk.dim(" squads find testing"));
45
+ return;
46
+ }
47
+ const spinner = ora(`Searching for "${query}"...`).start();
48
+ try {
49
+ const limit = parseInt(options.limit, 10) || 20;
50
+ const results = await searchRegistry(query, limit);
51
+ trackFind(query);
52
+ if (results.length === 0) {
53
+ spinner.info(chalk.yellow(`No squads found for "${query}"`));
54
+ return;
55
+ }
56
+ spinner.succeed(`Found ${results.length} squad(s)\n`);
57
+ // Table header
58
+ const nameWidth = 28;
59
+ const installsWidth = 10;
60
+ const starsWidth = 8;
61
+ console.log(chalk.bold(" " +
62
+ "Name".padEnd(nameWidth) +
63
+ "Installs".padEnd(installsWidth) +
64
+ "Rating".padEnd(starsWidth) +
65
+ "Description"));
66
+ console.log(chalk.dim(" " + "-".repeat(nameWidth + installsWidth + starsWidth + 40)));
67
+ for (const result of results) {
68
+ const name = chalk.cyan(truncate(result.display_name || result.name, nameWidth - 2).padEnd(nameWidth));
69
+ const installs = chalk.dim(formatCount(result.install_count).padEnd(installsWidth));
70
+ const stars = renderStars(result.review_avg).padEnd(starsWidth);
71
+ const desc = chalk.dim(truncate(result.description || "", 50));
72
+ console.log(` ${name}${installs}${stars}${desc}`);
73
+ }
74
+ console.log();
75
+ console.log(chalk.dim(" Install with: squads add <name>"));
76
+ }
77
+ catch (err) {
78
+ spinner.fail(chalk.red(err.message));
79
+ process.exit(1);
80
+ }
81
+ });
82
+ return cmd;
83
+ }
84
+ //# sourceMappingURL=find.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find.js","sourceRoot":"","sources":["../../src/commands/find.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function createInitCommand(): Command;
3
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0MpC,wBAAgB,iBAAiB,IAAI,OAAO,CAiI3C"}
@@ -0,0 +1,281 @@
1
+ import { Command } from "commander";
2
+ import chalk from "chalk";
3
+ import ora from "ora";
4
+ import prompts from "prompts";
5
+ import { mkdir, writeFile, stat } from "node:fs/promises";
6
+ import { join, basename } from "node:path";
7
+ const SQUAD_YAML_TEMPLATE = (name, description) => `name: ${name}
8
+ version: 1.0.0
9
+ description: "${description}"
10
+ slashPrefix: ${name.slice(0, 3)}
11
+
12
+ aios:
13
+ minVersion: "2.1.0"
14
+ type: squad
15
+
16
+ components:
17
+ agents:
18
+ - agents/sample-agent.md
19
+ tasks:
20
+ - tasks/sample-task.md
21
+ workflows:
22
+ - workflows/main-workflow.yaml
23
+ config:
24
+ - config/coding-standards.md
25
+ - config/tech-stack.md
26
+ - config/source-tree.md
27
+ `;
28
+ const SAMPLE_AGENT = (name) => `---
29
+ agent:
30
+ name: SampleAgent
31
+ id: sample-agent
32
+ title: Sample Agent
33
+ icon: "🤖"
34
+ whenToUse: "Use this agent as a starting point for your squad."
35
+ persona_profile:
36
+ archetype: Builder
37
+ communication:
38
+ tone: professional
39
+ greeting_levels:
40
+ brief: "Hello! I'm the sample agent for ${name}."
41
+ standard: "Hello! I'm the sample agent for ${name}. I'm here to help you get started."
42
+ detailed: "Hello! I'm the sample agent for ${name}. I'm a starting template — customize me to fit your squad's needs."
43
+ ---
44
+
45
+ # SampleAgent
46
+
47
+ ## Papel
48
+
49
+ Agente de exemplo para o squad **${name}**. Substitua este arquivo com agentes reais.
50
+
51
+ ## Capacidades
52
+
53
+ - Capacidade de exemplo 1
54
+ - Capacidade de exemplo 2
55
+
56
+ ## Instruções
57
+
58
+ 1. Edite este arquivo para definir o comportamento do agente
59
+ 2. Adicione persona_profile, commands e greeting_levels
60
+ 3. Consulte a documentação AIOS para o formato completo
61
+ `;
62
+ const SAMPLE_TASK = (name) => `---
63
+ task: sampleTask()
64
+ responsavel: "SampleAgent"
65
+ responsavel_type: Agente
66
+ atomic_layer: Molecule
67
+ Entrada:
68
+ - input_data: "Dados de entrada de exemplo"
69
+ Saida:
70
+ - output_result: "Resultado processado"
71
+ Checklist:
72
+ - Validar entrada
73
+ - Processar dados
74
+ - Retornar resultado
75
+ ---
76
+
77
+ # sampleTask()
78
+
79
+ ## Descrição
80
+
81
+ Task de exemplo para o squad **${name}**. Substitua com tasks reais.
82
+
83
+ ## Contrato
84
+
85
+ ### Entrada
86
+ - \`input_data\`: Dados de entrada de exemplo
87
+
88
+ ### Saída
89
+ - \`output_result\`: Resultado processado
90
+
91
+ ## Passos
92
+
93
+ 1. Receber e validar os dados de entrada
94
+ 2. Processar conforme regras de negócio
95
+ 3. Retornar resultado formatado
96
+ `;
97
+ const SAMPLE_WORKFLOW = (name) => `workflow_name: main_workflow
98
+ description: "Workflow principal do squad ${name}"
99
+ agent_sequence:
100
+ - sample-agent
101
+ success_indicators:
102
+ - "Task completada com sucesso"
103
+ - "Output validado"
104
+
105
+ transitions:
106
+ start:
107
+ next: sample-agent
108
+ condition: "Sempre"
109
+ sample-agent:
110
+ next: end
111
+ condition: "Task finalizada"
112
+ `;
113
+ const CODING_STANDARDS = `# Padrões de Código
114
+
115
+ ## Naming
116
+ - Arquivos: kebab-case
117
+ - Variáveis: camelCase
118
+ - Constantes: UPPER_SNAKE_CASE
119
+
120
+ ## Estilo
121
+ - UTF-8 em todos os arquivos
122
+ - Indentação: 2 espaços
123
+ - Aspas: duplas para strings
124
+
125
+ ## Testes
126
+ - Cobertura mínima: 80%
127
+ - Nomenclatura: describe/it pattern
128
+ `;
129
+ const TECH_STACK = `# Tech Stack
130
+
131
+ ## Runtime
132
+ - Node.js >= 18
133
+
134
+ ## Frameworks
135
+ - (Defina os frameworks do projeto-alvo aqui)
136
+
137
+ ## Dependências
138
+ - (Liste as dependências principais aqui)
139
+ `;
140
+ const SOURCE_TREE = `# Source Tree
141
+
142
+ \`\`\`
143
+ project/
144
+ ├── agents/ # Agent definitions
145
+ ├── tasks/ # Task definitions
146
+ ├── workflows/ # Workflow definitions
147
+ ├── config/ # Configuration files
148
+ ├── squad.yaml # Squad manifest
149
+ └── README.md # Documentation
150
+ \`\`\`
151
+ `;
152
+ const README_TEMPLATE = (name, description) => `# ${name}
153
+
154
+ ${description}
155
+
156
+ ## Instalação
157
+
158
+ \`\`\`bash
159
+ npx squads add ./${name}
160
+ \`\`\`
161
+
162
+ ## Agentes
163
+
164
+ | Agente | Papel |
165
+ |--------|-------|
166
+ | sample-agent | Agente de exemplo |
167
+
168
+ ## Estrutura
169
+
170
+ \`\`\`
171
+ ${name}/
172
+ ├── agents/
173
+ │ └── sample-agent.md
174
+ ├── tasks/
175
+ │ └── sample-task.md
176
+ ├── workflows/
177
+ │ └── main-workflow.yaml
178
+ ├── config/
179
+ │ ├── coding-standards.md
180
+ │ ├── tech-stack.md
181
+ │ └── source-tree.md
182
+ ├── squad.yaml
183
+ └── README.md
184
+ \`\`\`
185
+
186
+ ## Uso
187
+
188
+ Após instalar, os agentes ficam disponíveis como slash commands no Claude Code:
189
+
190
+ \`\`\`
191
+ /${name.slice(0, 3)}:agents:sample-agent
192
+ \`\`\`
193
+ `;
194
+ export function createInitCommand() {
195
+ const cmd = new Command("init")
196
+ .description("Initialize a new squad project")
197
+ .argument("[name]", "Squad name (kebab-case)")
198
+ .option("-y, --yes", "Use defaults without prompting")
199
+ .action(async (nameArg, options) => {
200
+ let name = nameArg;
201
+ let description = "";
202
+ if (!options.yes || !name) {
203
+ const answers = await prompts([
204
+ {
205
+ type: name ? null : "text",
206
+ name: "name",
207
+ message: "Squad name (kebab-case):",
208
+ initial: name || basename(process.cwd()),
209
+ validate: (v) => /^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/.test(v)
210
+ ? true
211
+ : "Must be kebab-case (lowercase letters, numbers, hyphens)",
212
+ },
213
+ {
214
+ type: "text",
215
+ name: "description",
216
+ message: "Description:",
217
+ initial: "An AIOS squad",
218
+ },
219
+ ]);
220
+ name = answers.name || name;
221
+ description = answers.description || "An AIOS squad";
222
+ }
223
+ else {
224
+ description = "An AIOS squad";
225
+ }
226
+ if (!name) {
227
+ console.log(chalk.dim("Initialization cancelled."));
228
+ return;
229
+ }
230
+ const targetDir = join(process.cwd(), name);
231
+ // Check if directory already exists
232
+ try {
233
+ await stat(targetDir);
234
+ console.log(chalk.red(`Directory "${name}" already exists.`));
235
+ process.exit(1);
236
+ }
237
+ catch {
238
+ // Directory doesn't exist, good
239
+ }
240
+ const spinner = ora(`Creating squad "${name}"...`).start();
241
+ try {
242
+ // Create directories
243
+ await mkdir(join(targetDir, "agents"), { recursive: true });
244
+ await mkdir(join(targetDir, "tasks"), { recursive: true });
245
+ await mkdir(join(targetDir, "workflows"), { recursive: true });
246
+ await mkdir(join(targetDir, "config"), { recursive: true });
247
+ // Write files
248
+ await writeFile(join(targetDir, "squad.yaml"), SQUAD_YAML_TEMPLATE(name, description), "utf-8");
249
+ await writeFile(join(targetDir, "agents", "sample-agent.md"), SAMPLE_AGENT(name), "utf-8");
250
+ await writeFile(join(targetDir, "tasks", "sample-task.md"), SAMPLE_TASK(name), "utf-8");
251
+ await writeFile(join(targetDir, "workflows", "main-workflow.yaml"), SAMPLE_WORKFLOW(name), "utf-8");
252
+ await writeFile(join(targetDir, "config", "coding-standards.md"), CODING_STANDARDS, "utf-8");
253
+ await writeFile(join(targetDir, "config", "tech-stack.md"), TECH_STACK, "utf-8");
254
+ await writeFile(join(targetDir, "config", "source-tree.md"), SOURCE_TREE, "utf-8");
255
+ await writeFile(join(targetDir, "README.md"), README_TEMPLATE(name, description), "utf-8");
256
+ spinner.succeed(chalk.green(`Squad "${chalk.bold(name)}" created!`));
257
+ console.log();
258
+ console.log(chalk.dim(" Files created:"));
259
+ console.log(chalk.dim(` ${name}/squad.yaml`));
260
+ console.log(chalk.dim(` ${name}/agents/sample-agent.md`));
261
+ console.log(chalk.dim(` ${name}/tasks/sample-task.md`));
262
+ console.log(chalk.dim(` ${name}/workflows/main-workflow.yaml`));
263
+ console.log(chalk.dim(` ${name}/config/coding-standards.md`));
264
+ console.log(chalk.dim(` ${name}/config/tech-stack.md`));
265
+ console.log(chalk.dim(` ${name}/config/source-tree.md`));
266
+ console.log(chalk.dim(` ${name}/README.md`));
267
+ console.log();
268
+ console.log(chalk.dim(" Next steps:"));
269
+ console.log(chalk.dim(` cd ${name}`));
270
+ console.log(chalk.dim(" Edit agents/ to define your agents"));
271
+ console.log(chalk.dim(" Edit tasks/ to define your tasks"));
272
+ console.log(chalk.dim(" Edit workflows/ to define your workflows"));
273
+ }
274
+ catch (err) {
275
+ spinner.fail(chalk.red(err.message));
276
+ process.exit(1);
277
+ }
278
+ });
279
+ return cmd;
280
+ }
281
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function createListCommand(): Command;
3
+ //# sourceMappingURL=list.d.ts.map