@zaip-ai/cli 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 (86) hide show
  1. package/LICENSE +5 -0
  2. package/README.md +74 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +4 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/init.d.ts +9 -0
  8. package/dist/commands/init.d.ts.map +1 -0
  9. package/dist/commands/init.js +41 -0
  10. package/dist/commands/init.js.map +1 -0
  11. package/dist/index.d.ts +10 -0
  12. package/dist/index.d.ts.map +1 -0
  13. package/dist/index.js +61 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/services/find-project-root.d.ts +6 -0
  16. package/dist/services/find-project-root.d.ts.map +1 -0
  17. package/dist/services/find-project-root.js +29 -0
  18. package/dist/services/find-project-root.js.map +1 -0
  19. package/dist/services/install-agents-template.d.ts +3 -0
  20. package/dist/services/install-agents-template.d.ts.map +1 -0
  21. package/dist/services/install-agents-template.js +188 -0
  22. package/dist/services/install-agents-template.js.map +1 -0
  23. package/dist/services/logger.d.ts +4 -0
  24. package/dist/services/logger.d.ts.map +1 -0
  25. package/dist/services/logger.js +40 -0
  26. package/dist/services/logger.js.map +1 -0
  27. package/dist/services/template-manifest.d.ts +23 -0
  28. package/dist/services/template-manifest.d.ts.map +1 -0
  29. package/dist/services/template-manifest.js +77 -0
  30. package/dist/services/template-manifest.js.map +1 -0
  31. package/dist/types.d.ts +32 -0
  32. package/dist/types.d.ts.map +1 -0
  33. package/dist/types.js +2 -0
  34. package/dist/types.js.map +1 -0
  35. package/package.json +43 -0
  36. package/templates/.agents/config/framework.lock.yaml +1 -0
  37. package/templates/.agents/config/project.yaml +15 -0
  38. package/templates/.agents/data/changes/.gitkeep +0 -0
  39. package/templates/.agents/data/executions/.gitkeep +0 -0
  40. package/templates/.agents/data/prds/.gitkeep +0 -0
  41. package/templates/.agents/data/runs/.gitkeep +0 -0
  42. package/templates/.agents/data/specs/.gitkeep +0 -0
  43. package/templates/.agents/data/tasks/.gitkeep +0 -0
  44. package/templates/.agents/requirements/context-engine.md +20 -0
  45. package/templates/.agents/requirements/cost-observability.md +20 -0
  46. package/templates/.agents/requirements/execution-engine.md +35 -0
  47. package/templates/.agents/requirements/kanban-dashboard.md +21 -0
  48. package/templates/.agents/requirements/work-lifecycle.md +27 -0
  49. package/templates/.agents/rules/architecture.md +21 -0
  50. package/templates/.agents/rules/context.md +18 -0
  51. package/templates/.agents/rules/core.md +16 -0
  52. package/templates/.agents/rules/security.md +20 -0
  53. package/templates/.agents/rules/workflow.md +21 -0
  54. package/templates/.agents/skills/zaip-skill-adapt-stack/SKILL.md +11 -0
  55. package/templates/.agents/skills/zaip-skill-adapt-stack/agents/openai.yaml +4 -0
  56. package/templates/.agents/skills/zaip-skill-adapters/SKILL.md +12 -0
  57. package/templates/.agents/skills/zaip-skill-adapters/agents/openai.yaml +4 -0
  58. package/templates/.agents/skills/zaip-skill-context/SKILL.md +12 -0
  59. package/templates/.agents/skills/zaip-skill-context/agents/openai.yaml +4 -0
  60. package/templates/.agents/skills/zaip-skill-cqrs/SKILL.md +11 -0
  61. package/templates/.agents/skills/zaip-skill-cqrs/agents/openai.yaml +4 -0
  62. package/templates/.agents/skills/zaip-skill-decisions/SKILL.md +12 -0
  63. package/templates/.agents/skills/zaip-skill-decisions/agents/openai.yaml +4 -0
  64. package/templates/.agents/skills/zaip-skill-enforce-architecture/SKILL.md +11 -0
  65. package/templates/.agents/skills/zaip-skill-enforce-architecture/agents/openai.yaml +4 -0
  66. package/templates/.agents/skills/zaip-skill-eval/SKILL.md +12 -0
  67. package/templates/.agents/skills/zaip-skill-eval/agents/openai.yaml +4 -0
  68. package/templates/.agents/skills/zaip-skill-github-deploy/SKILL.md +84 -0
  69. package/templates/.agents/skills/zaip-skill-github-deploy/agents/openai.yaml +6 -0
  70. package/templates/.agents/skills/zaip-skill-github-setup/SKILL.md +80 -0
  71. package/templates/.agents/skills/zaip-skill-github-setup/agents/openai.yaml +4 -0
  72. package/templates/.agents/skills/zaip-skill-navigate-work/SKILL.md +13 -0
  73. package/templates/.agents/skills/zaip-skill-navigate-work/agents/openai.yaml +4 -0
  74. package/templates/.agents/skills/zaip-skill-prd/SKILL.md +13 -0
  75. package/templates/.agents/skills/zaip-skill-prd/agents/openai.yaml +4 -0
  76. package/templates/.agents/skills/zaip-skill-requirements/SKILL.md +12 -0
  77. package/templates/.agents/skills/zaip-skill-requirements/agents/openai.yaml +4 -0
  78. package/templates/.agents/skills/zaip-skill-setup/SKILL.md +12 -0
  79. package/templates/.agents/skills/zaip-skill-setup/agents/openai.yaml +4 -0
  80. package/templates/.agents/skills/zaip-skill-spec/SKILL.md +12 -0
  81. package/templates/.agents/skills/zaip-skill-spec/agents/openai.yaml +4 -0
  82. package/templates/.agents/skills/zaip-skill-task/SKILL.md +13 -0
  83. package/templates/.agents/skills/zaip-skill-task/agents/openai.yaml +4 -0
  84. package/templates/.agents/skills/zaip-skill-text-encoding/SKILL.md +27 -0
  85. package/templates/.agents/skills/zaip-skill-text-encoding/agents/openai.yaml +6 -0
  86. package/templates/template-manifest.json +208 -0
package/LICENSE ADDED
@@ -0,0 +1,5 @@
1
+ UNLICENSED
2
+
3
+ Copyright (c) 2026 ZAIP-AI. All rights reserved.
4
+
5
+ No license grant is implied by publication of this package.
package/README.md ADDED
@@ -0,0 +1,74 @@
1
+ # @zaip-ai/cli
2
+
3
+ ```bash
4
+ npx @zaip-ai/cli@latest init
5
+ ```
6
+
7
+ Or use the npm initializer:
8
+
9
+ ```bash
10
+ npm create zaip-aios@latest
11
+ ```
12
+
13
+ Global installation is also supported:
14
+
15
+ ```bash
16
+ npm install --global @zaip-ai/cli
17
+ zaip init
18
+ ```
19
+
20
+ The CLI requires Node.js 22 or newer. It finds the nearest Git root from the selected directory;
21
+ outside Git it installs into that directory and reports the fallback. Windows, macOS, Linux, CI,
22
+ Git worktrees, and paths containing spaces are supported using Node.js filesystem APIs only.
23
+
24
+ ## Commands and flags
25
+
26
+ ```text
27
+ zaip init [directory] [--yes] [--force] [--dry-run] [--verbose]
28
+ zaip --version
29
+ zaip --help
30
+ ```
31
+
32
+ - `--yes` confirms the destructive phase of `--force` without an interactive prompt.
33
+ - `--force` backs up the current `.agents` directory, then reinstalls the official template.
34
+ - `--dry-run` prints the complete plan without writing files or backups.
35
+ - `--verbose` lists technical paths and detected conflicts.
36
+
37
+ By default, rerunning the command adds missing files, preserves every existing file, and reports
38
+ files whose content differs from the current official template. No existing file is overwritten.
39
+
40
+ ## Updating
41
+
42
+ Run the latest version again. New files are added while local changes remain untouched:
43
+
44
+ ```bash
45
+ npx @zaip-ai/cli@latest init
46
+ ```
47
+
48
+ Use `--force --yes` only when you want a clean reinstall. A timestamped backup such as
49
+ `.agents.backup-2026-07-12T153000` is created first.
50
+
51
+ ## Security
52
+
53
+ The npm artifact contains only the installer, the public template, documentation, and license.
54
+ Template hashes are checked before installation. Unsafe paths and symlink traversal are rejected.
55
+ The template excludes project history, telemetry, customer data, credentials, environment files,
56
+ and the internal ZAIP-AIOS runtime.
57
+
58
+ ## Troubleshooting
59
+
60
+ - `Target is not a directory`: pass an existing directory.
61
+ - `--force requires --yes in a non-interactive terminal`: add `--yes`, or rerun interactively.
62
+ - `Template integrity check failed`: reinstall the package from npm and retry.
63
+ - Permission errors: run in a writable repository; do not use elevated privileges unnecessarily.
64
+
65
+ ## ZAIP-AIOS versus the ZAIP CLI
66
+
67
+ ZAIP-AIOS is the repository-resident agent workflow and configuration installed under `.agents`.
68
+ The ZAIP CLI is the small delivery tool that installs that public template; it does not contain the
69
+ private ZAIP core or send repository data to a service.
70
+
71
+ ## Contributing and license
72
+
73
+ Run `corepack pnpm verify` from `public-cli` before submitting a change. Version `0.1.0` is
74
+ `UNLICENSED`; publication does not grant an open-source license.
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ import { runCli } from "./index.js";
3
+ process.exitCode = await runCli(process.argv.slice(2));
4
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEpC,OAAO,CAAC,QAAQ,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { CliRuntime, InitResult } from "../types.js";
2
+ export interface InitCommandOptions {
3
+ yes?: boolean;
4
+ force?: boolean;
5
+ dryRun?: boolean;
6
+ verbose?: boolean;
7
+ }
8
+ export declare function executeInit(directory: string | undefined, command: InitCommandOptions, version: string, runtime?: CliRuntime): Promise<InitResult>;
9
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAe,UAAU,EAAE,MAAM,aAAa,CAAC;AAEvE,MAAM,WAAW,kBAAkB;IACjC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,OAAO,EAAE,kBAAkB,EAC3B,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,UAAU,CAAC,CAuBrB"}
@@ -0,0 +1,41 @@
1
+ import { createInterface } from "node:readline/promises";
2
+ import { installAgentsTemplate } from "../services/install-agents-template.js";
3
+ import { printResult } from "../services/logger.js";
4
+ export async function executeInit(directory, command, version, runtime = {}) {
5
+ const stdin = runtime.stdin ?? process.stdin;
6
+ const stdout = runtime.stdout ?? process.stdout;
7
+ const options = {
8
+ cwd: runtime.cwd ?? process.cwd(),
9
+ yes: command.yes ?? false,
10
+ force: command.force ?? false,
11
+ dryRun: command.dryRun ?? false,
12
+ verbose: command.verbose ?? false,
13
+ ...(directory === undefined ? {} : { directory }),
14
+ ...(runtime.templateDirectory === undefined
15
+ ? {}
16
+ : { templateDirectory: runtime.templateDirectory }),
17
+ ...(runtime.now === undefined ? {} : { now: runtime.now() }),
18
+ };
19
+ if (command.force && !command.yes) {
20
+ options.confirmForce = confirmation(stdin, stdout);
21
+ }
22
+ const result = await installAgentsTemplate(options);
23
+ printResult(stdout, result, version, command.verbose);
24
+ return result;
25
+ }
26
+ function confirmation(stdin, stdout) {
27
+ return async (message) => {
28
+ if (!stdin.isTTY) {
29
+ throw new Error("--force requires --yes in a non-interactive terminal");
30
+ }
31
+ const prompt = createInterface({ input: stdin, output: stdout });
32
+ try {
33
+ const answer = await prompt.question(`${message} [y/N] `);
34
+ return /^(?:y|yes)$/i.test(answer.trim());
35
+ }
36
+ finally {
37
+ prompt.close();
38
+ }
39
+ };
40
+ }
41
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wCAAwC,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAUpD,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,SAA6B,EAC7B,OAA2B,EAC3B,OAAe,EACf,OAAO,GAAe,EAAE;IAExB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC;IAC7C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IAChD,MAAM,OAAO,GAAgB;QAC3B,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;QACjC,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,KAAK;QACzB,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,KAAK;QAC7B,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;QAC/B,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK;QACjC,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;QACjD,GAAG,CAAC,OAAO,CAAC,iBAAiB,KAAK,SAAS;YACzC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC;QACrD,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;KAC7D,CAAC;IAEF,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;QAClC,OAAO,CAAC,YAAY,GAAG,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACrD,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;IACpD,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACtD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,KAAe,EAAE,MAAgB;IACrD,OAAO,KAAK,EAAE,OAAO,EAAE,EAAE;QACvB,IAAI,CAAE,KAA2B,CAAC,KAAK,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QACD,MAAM,MAAM,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,GAAG,OAAO,SAAS,CAAC,CAAC;YAC1D,OAAO,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QAC5C,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { CliRuntime, InitOptions, InitResult } from "./types.js";
2
+ export declare const CLI_VERSION = "0.1.0";
3
+ export { findProjectRoot } from "./services/find-project-root.js";
4
+ export { installAgentsTemplate } from "./services/install-agents-template.js";
5
+ export { loadTemplate } from "./services/template-manifest.js";
6
+ export type { CliRuntime, InitOptions, InitResult } from "./types.js";
7
+ export declare function initializeZaip(options?: InitOptions): Promise<InitResult>;
8
+ export declare function runInitCli(arguments_: readonly string[], runtime?: CliRuntime): Promise<number>;
9
+ export declare function runCli(arguments_: readonly string[], runtime?: CliRuntime): Promise<number>;
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEtE,eAAO,MAAM,WAAW,UAAU,CAAC;AAEnC,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEtE,wBAAsB,cAAc,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CAEnF;AAED,wBAAsB,UAAU,CAC9B,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,MAAM,CAAC,CAEjB;AAED,wBAAsB,MAAM,CAC1B,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,MAAM,CAAC,CA2BjB"}
package/dist/index.js ADDED
@@ -0,0 +1,61 @@
1
+ import { Command, CommanderError } from "commander";
2
+ import { executeInit } from "./commands/init.js";
3
+ import { installAgentsTemplate } from "./services/install-agents-template.js";
4
+ export const CLI_VERSION = "0.1.0";
5
+ export { findProjectRoot } from "./services/find-project-root.js";
6
+ export { installAgentsTemplate } from "./services/install-agents-template.js";
7
+ export { loadTemplate } from "./services/template-manifest.js";
8
+ export async function initializeZaip(options = {}) {
9
+ return installAgentsTemplate(options);
10
+ }
11
+ export async function runInitCli(arguments_, runtime = {}) {
12
+ return runCli(["init", ...arguments_], runtime);
13
+ }
14
+ export async function runCli(arguments_, runtime = {}) {
15
+ const stdout = runtime.stdout ?? process.stdout;
16
+ const stderr = runtime.stderr ?? process.stderr;
17
+ if (arguments_.length === 0) {
18
+ const program = createProgram(runtime);
19
+ program.configureOutput({
20
+ writeOut: (value) => stdout.write(value),
21
+ writeErr: (value) => stderr.write(value),
22
+ });
23
+ program.outputHelp();
24
+ return 0;
25
+ }
26
+ const program = createProgram(runtime);
27
+ program.configureOutput({
28
+ writeOut: (value) => stdout.write(value),
29
+ writeErr: (value) => stderr.write(value),
30
+ });
31
+ program.exitOverride();
32
+ try {
33
+ await program.parseAsync(["node", "zaip", ...arguments_]);
34
+ return 0;
35
+ }
36
+ catch (error) {
37
+ if (error instanceof CommanderError)
38
+ return error.exitCode;
39
+ stderr.write(`Erro: ${error instanceof Error ? error.message : String(error)}\n`);
40
+ return 1;
41
+ }
42
+ }
43
+ function createProgram(runtime) {
44
+ const program = new Command()
45
+ .name("zaip")
46
+ .description("Instala e configura o ZAIP-AIOS em um repositório")
47
+ .version(CLI_VERSION);
48
+ program
49
+ .command("init")
50
+ .description("Instala o template oficial .agents")
51
+ .argument("[directory]", "diretório inicial; por padrão usa o diretório atual")
52
+ .option("-y, --yes", "confirma operações sem prompt interativo")
53
+ .option("-f, --force", "cria backup e reinstala o template")
54
+ .option("--dry-run", "mostra o plano sem alterar arquivos")
55
+ .option("--verbose", "mostra detalhes técnicos")
56
+ .action(async (directory, options) => {
57
+ await executeInit(directory, options, CLI_VERSION, runtime);
58
+ });
59
+ return program;
60
+ }
61
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface ProjectRootResult {
2
+ root: string;
3
+ gitRootFound: boolean;
4
+ }
5
+ export declare function findProjectRoot(directory: string): Promise<ProjectRootResult>;
6
+ //# sourceMappingURL=find-project-root.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-project-root.d.ts","sourceRoot":"","sources":["../../src/services/find-project-root.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAcnF"}
@@ -0,0 +1,29 @@
1
+ import { lstat, stat } from "node:fs/promises";
2
+ import { dirname, resolve } from "node:path";
3
+ export async function findProjectRoot(directory) {
4
+ const start = resolve(directory);
5
+ const info = await stat(start).catch(() => null);
6
+ if (info === null || !info.isDirectory()) {
7
+ throw new Error(`Target is not a directory: ${start}`);
8
+ }
9
+ let current = start;
10
+ while (true) {
11
+ if (await exists(`${current}/.git`))
12
+ return { root: current, gitRootFound: true };
13
+ const parent = dirname(current);
14
+ if (parent === current)
15
+ return { root: start, gitRootFound: false };
16
+ current = parent;
17
+ }
18
+ }
19
+ async function exists(path) {
20
+ return lstat(path).then(() => true, (error) => {
21
+ if (isNotFound(error))
22
+ return false;
23
+ throw error;
24
+ });
25
+ }
26
+ function isNotFound(error) {
27
+ return error instanceof Error && "code" in error && error.code === "ENOENT";
28
+ }
29
+ //# sourceMappingURL=find-project-root.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-project-root.js","sourceRoot":"","sources":["../../src/services/find-project-root.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAO7C,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,SAAiB;IACrD,MAAM,KAAK,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;IACjD,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACzC,MAAM,IAAI,KAAK,CAAC,8BAA8B,KAAK,EAAE,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,MAAM,MAAM,CAAC,GAAG,OAAO,OAAO,CAAC;YAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;QAClF,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,MAAM,KAAK,OAAO;YAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;QACpE,OAAO,GAAG,MAAM,CAAC;IACnB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,IAAY;IAChC,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CACrB,GAAG,EAAE,CAAC,IAAI,EACV,CAAC,KAAc,EAAE,EAAE;QACjB,IAAI,UAAU,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QACpC,MAAM,KAAK,CAAC;IACd,CAAC,CACF,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;AAC9E,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { InitOptions, InitResult } from "../types.js";
2
+ export declare function installAgentsTemplate(options?: InitOptions): Promise<InitResult>;
3
+ //# sourceMappingURL=install-agents-template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-agents-template.d.ts","sourceRoot":"","sources":["../../src/services/install-agents-template.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAc3D,wBAAsB,qBAAqB,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,UAAU,CAAC,CAyD1F"}
@@ -0,0 +1,188 @@
1
+ import { constants } from "node:fs";
2
+ import { access, cp, lstat, mkdir, readFile, rm, writeFile } from "node:fs/promises";
3
+ import { basename, dirname, join, relative, resolve, sep } from "node:path";
4
+ import { findProjectRoot } from "./find-project-root.js";
5
+ import { loadTemplate, sha256, validateTemplatePath, } from "./template-manifest.js";
6
+ export async function installAgentsTemplate(options = {}) {
7
+ const cwd = resolve(options.cwd ?? process.cwd());
8
+ const requested = resolve(cwd, options.directory ?? ".");
9
+ const project = await findProjectRoot(requested);
10
+ await access(project.root, constants.W_OK);
11
+ const template = await loadTemplate(options.templateDirectory);
12
+ const rendered = renderTemplate(template.files, basename(project.root));
13
+ const agentsPath = join(project.root, ".agents");
14
+ const agentsExists = await pathExists(agentsPath);
15
+ if (agentsExists)
16
+ await assertNotSymlink(agentsPath);
17
+ const created = [];
18
+ const existing = [];
19
+ const conflicts = [];
20
+ const overwritten = [];
21
+ for (const file of rendered) {
22
+ validateTemplatePath(file.path);
23
+ await assertSafeDestination(project.root, file.path);
24
+ const destination = resolve(project.root, file.path);
25
+ const current = await readFile(destination, "utf8").catch((error) => {
26
+ if (isNotFound(error))
27
+ return null;
28
+ throw error;
29
+ });
30
+ if (current === null)
31
+ created.push(file.path);
32
+ else if (current === file.content)
33
+ existing.push(file.path);
34
+ else if (options.force)
35
+ overwritten.push(file.path);
36
+ else
37
+ conflicts.push(file.path);
38
+ }
39
+ const backupPath = options.force && agentsExists ? await availableBackupPath(project.root, options.now) : null;
40
+ if (options.force && agentsExists && !options.dryRun && options.yes !== true) {
41
+ if (options.confirmForce === undefined) {
42
+ throw new Error("--force requires --yes in a non-interactive terminal");
43
+ }
44
+ const confirmed = await options.confirmForce(`Create backup ${basename(backupPath)} and reinstall .agents?`);
45
+ if (!confirmed)
46
+ throw new Error("Installation cancelled by user");
47
+ }
48
+ if (options.dryRun) {
49
+ return result(project, created, existing, conflicts, overwritten, backupPath, true, false);
50
+ }
51
+ if (options.force && agentsExists) {
52
+ await forceInstall(project.root, agentsPath, backupPath, rendered);
53
+ }
54
+ else {
55
+ await additiveInstall(project.root, rendered.filter((file) => created.includes(file.path)));
56
+ }
57
+ return result(project, created, existing, conflicts, overwritten, backupPath, false, true);
58
+ }
59
+ function renderTemplate(files, projectName) {
60
+ const projectId = normalizeProjectId(projectName);
61
+ const rendered = files
62
+ .filter((file) => file.path !== ".agents/config/framework.lock.yaml")
63
+ .map((file) => ({
64
+ path: file.path,
65
+ content: file.content
66
+ .replaceAll("{{PROJECT_NAME}}", yamlString(projectName))
67
+ .replaceAll("{{PROJECT_ID}}", yamlString(projectId)),
68
+ }));
69
+ const managed = rendered.filter((file) => !file.path.startsWith(".agents/config/"));
70
+ const lock = frameworkLock(managed);
71
+ rendered.push({ path: ".agents/config/framework.lock.yaml", content: lock });
72
+ return rendered.sort((left, right) => left.path.localeCompare(right.path));
73
+ }
74
+ function frameworkLock(files) {
75
+ const lines = [
76
+ "lock_version: 1",
77
+ "framework:",
78
+ ' version: "0.2.0"',
79
+ " distribution_sha256: null",
80
+ "layout:",
81
+ " version: 2",
82
+ "resolved_profile:",
83
+ " id: typescript-hono-kysely",
84
+ " sha256: null",
85
+ "managed_files:",
86
+ ];
87
+ for (const file of files) {
88
+ lines.push(` ${yamlString(file.path)}:`, ` sha256: ${sha256(file.content)}`);
89
+ }
90
+ return `${lines.join("\n")}\n`;
91
+ }
92
+ async function additiveInstall(root, files) {
93
+ const written = [];
94
+ try {
95
+ for (const file of files) {
96
+ const destination = resolve(root, file.path);
97
+ await mkdir(dirname(destination), { recursive: true });
98
+ await writeFile(destination, file.content, { encoding: "utf8", flag: "wx" });
99
+ written.push(destination);
100
+ }
101
+ }
102
+ catch (error) {
103
+ for (const path of written.reverse())
104
+ await rm(path, { force: true });
105
+ throw error;
106
+ }
107
+ }
108
+ async function forceInstall(root, agentsPath, backupPath, files) {
109
+ await cp(agentsPath, backupPath, { recursive: true, errorOnExist: true, force: false });
110
+ try {
111
+ await rm(agentsPath, { recursive: true, force: false });
112
+ await additiveInstall(root, files);
113
+ }
114
+ catch (error) {
115
+ await rm(agentsPath, { recursive: true, force: true });
116
+ await cp(backupPath, agentsPath, { recursive: true, errorOnExist: true, force: false });
117
+ throw error;
118
+ }
119
+ }
120
+ async function assertSafeDestination(root, portablePath) {
121
+ const destination = resolve(root, portablePath);
122
+ const prefix = `${resolve(root)}${sep}`;
123
+ if (!destination.startsWith(prefix))
124
+ throw new Error(`Destination escapes project root: ${portablePath}`);
125
+ const parts = portablePath.split("/");
126
+ let current = root;
127
+ for (const part of parts.slice(0, -1)) {
128
+ current = join(current, part);
129
+ const info = await lstat(current).catch((error) => {
130
+ if (isNotFound(error))
131
+ return null;
132
+ throw error;
133
+ });
134
+ if (info?.isSymbolicLink())
135
+ throw new Error(`Refusing to write through symlink: ${relative(root, current)}`);
136
+ }
137
+ }
138
+ async function assertNotSymlink(path) {
139
+ if ((await lstat(path)).isSymbolicLink())
140
+ throw new Error("Refusing to replace a symlinked .agents path");
141
+ }
142
+ async function availableBackupPath(root, now = new Date()) {
143
+ const stamp = now.toISOString().slice(0, 19).replaceAll(":", "");
144
+ const base = resolve(root, `.agents.backup-${stamp}`);
145
+ if (!(await pathExists(base)))
146
+ return base;
147
+ for (let suffix = 2; suffix < 10_000; suffix += 1) {
148
+ const candidate = `${base}-${suffix}`;
149
+ if (!(await pathExists(candidate)))
150
+ return candidate;
151
+ }
152
+ throw new Error("Could not allocate a unique .agents backup path");
153
+ }
154
+ function normalizeProjectId(name) {
155
+ const normalized = name
156
+ .normalize("NFKD")
157
+ .replace(/[\u0300-\u036f]/g, "")
158
+ .toLowerCase()
159
+ .replace(/[^a-z0-9]+/g, "-")
160
+ .replace(/^-+|-+$/g, "");
161
+ return normalized || "zaip-project";
162
+ }
163
+ function yamlString(value) {
164
+ return JSON.stringify(value);
165
+ }
166
+ async function pathExists(path) {
167
+ return lstat(path).then(() => true, (error) => {
168
+ if (isNotFound(error))
169
+ return false;
170
+ throw error;
171
+ });
172
+ }
173
+ function isNotFound(error) {
174
+ return error instanceof Error && "code" in error && error.code === "ENOENT";
175
+ }
176
+ function result(project, created, existing, conflicts, overwritten, backupPath, dryRun, applied) {
177
+ return {
178
+ ...project,
179
+ created: [...created].sort(),
180
+ existing: [...existing].sort(),
181
+ conflicts: [...conflicts].sort(),
182
+ overwritten: [...overwritten].sort(),
183
+ backupPath,
184
+ dryRun,
185
+ applied,
186
+ };
187
+ }
188
+ //# sourceMappingURL=install-agents-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-agents-template.js","sourceRoot":"","sources":["../../src/services/install-agents-template.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Writable } from "node:stream";
2
+ import type { InitResult } from "../types.js";
3
+ export declare function printResult(stream: Writable, result: InitResult, version: string, verbose?: boolean): void;
4
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/services/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,wBAAgB,WAAW,CACzB,MAAM,EAAE,QAAQ,EAChB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,MAAM,EACf,OAAO,UAAQ,GACd,IAAI,CA6CN"}
@@ -0,0 +1,40 @@
1
+ export function printResult(stream, result, version, verbose = false) {
2
+ write(stream, `Zaip-AIOS CLI v${version}\n\n`);
3
+ write(stream, result.gitRootFound
4
+ ? `✓ Projeto Git encontrado: ${result.root}\n`
5
+ : `ℹ Repositório Git não encontrado; usando: ${result.root}\n`);
6
+ write(stream, "✓ Template Zaip-AIOS carregado e verificado\n");
7
+ if (result.dryRun)
8
+ write(stream, "ℹ Dry-run: nenhuma alteração foi realizada\n");
9
+ if (result.backupPath !== null) {
10
+ write(stream, `${result.dryRun ? "ℹ Backup planejado" : "✓ Backup criado"}: ${result.backupPath}\n`);
11
+ }
12
+ write(stream, `✓ ${result.created.length} arquivos ausentes ${result.dryRun ? "seriam adicionados" : "foram adicionados"}\n`);
13
+ write(stream, `ℹ ${result.existing.length} arquivos existentes foram preservados\n`);
14
+ if (result.conflicts.length > 0) {
15
+ write(stream, `⚠ ${result.conflicts.length} arquivos possuem alterações locais e não foram sobrescritos\n`);
16
+ }
17
+ if (result.overwritten.length > 0) {
18
+ write(stream, `✓ ${result.overwritten.length} arquivos ${result.dryRun ? "seriam substituídos" : "foram substituídos"} com backup disponível\n`);
19
+ }
20
+ if (verbose) {
21
+ printPaths(stream, "Adicionados", result.created);
22
+ printPaths(stream, "Preservados", result.existing);
23
+ printPaths(stream, "Divergentes", result.conflicts);
24
+ printPaths(stream, "Substituídos", result.overwritten);
25
+ }
26
+ write(stream, result.dryRun
27
+ ? "\nPlano concluído. Remova --dry-run para aplicar.\n"
28
+ : "\nZaip-AIOS foi configurado com sucesso.\n\nPróximos passos:\n 1. Revise .agents/config/project.yaml\n 2. Ajuste Rules e Requirements do projeto\n 3. Execute o agente desejado\n");
29
+ }
30
+ function printPaths(stream, label, paths) {
31
+ if (paths.length === 0)
32
+ return;
33
+ write(stream, `\n${label}:\n`);
34
+ for (const path of paths)
35
+ write(stream, ` - ${path}\n`);
36
+ }
37
+ function write(stream, value) {
38
+ stream.write(value);
39
+ }
40
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/services/logger.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,WAAW,CACzB,MAAgB,EAChB,MAAkB,EAClB,OAAe,EACf,OAAO,GAAG,KAAK;IAEf,KAAK,CAAC,MAAM,EAAE,kBAAkB,OAAO,MAAM,CAAC,CAAC;IAC/C,KAAK,CACH,MAAM,EACN,MAAM,CAAC,YAAY;QACjB,CAAC,CAAC,6BAA6B,MAAM,CAAC,IAAI,IAAI;QAC9C,CAAC,CAAC,6CAA6C,MAAM,CAAC,IAAI,IAAI,CACjE,CAAC;IACF,KAAK,CAAC,MAAM,EAAE,+CAA+C,CAAC,CAAC;IAC/D,IAAI,MAAM,CAAC,MAAM;QAAE,KAAK,CAAC,MAAM,EAAE,8CAA8C,CAAC,CAAC;IACjF,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;QAC/B,KAAK,CACH,MAAM,EACN,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,iBAAiB,KAAK,MAAM,CAAC,UAAU,IAAI,CACtF,CAAC;IACJ,CAAC;IACD,KAAK,CACH,MAAM,EACN,KAAK,MAAM,CAAC,OAAO,CAAC,MAAM,sBAAsB,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,mBAAmB,IAAI,CAC/G,CAAC;IACF,KAAK,CAAC,MAAM,EAAE,KAAK,MAAM,CAAC,QAAQ,CAAC,MAAM,0CAA0C,CAAC,CAAC;IACrF,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,KAAK,CACH,MAAM,EACN,KAAK,MAAM,CAAC,SAAS,CAAC,MAAM,gEAAgE,CAC7F,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,KAAK,CACH,MAAM,EACN,KAAK,MAAM,CAAC,WAAW,CAAC,MAAM,aAAa,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,oBAAoB,0BAA0B,CAClI,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,EAAE,CAAC;QACZ,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QAClD,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnD,UAAU,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACpD,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IACzD,CAAC;IACD,KAAK,CACH,MAAM,EACN,MAAM,CAAC,MAAM;QACX,CAAC,CAAC,qDAAqD;QACvD,CAAC,CAAC,sLAAsL,CAC3L,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,MAAgB,EAAE,KAAa,EAAE,KAAwB;IAC3E,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC/B,KAAK,CAAC,MAAM,EAAE,KAAK,KAAK,KAAK,CAAC,CAAC;IAC/B,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,KAAK,CAAC,MAAM,EAAE,OAAO,IAAI,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,KAAK,CAAC,MAAgB,EAAE,KAAa;IAC5C,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACtB,CAAC"}
@@ -0,0 +1,23 @@
1
+ export interface TemplateManifestFile {
2
+ path: string;
3
+ sha256: string;
4
+ }
5
+ export interface TemplateManifest {
6
+ schemaVersion: 1;
7
+ templateVersion: string;
8
+ minimumCliVersion: string;
9
+ source: string;
10
+ files: readonly TemplateManifestFile[];
11
+ }
12
+ export interface LoadedTemplateFile extends TemplateManifestFile {
13
+ content: string;
14
+ }
15
+ export interface LoadedTemplate {
16
+ manifest: TemplateManifest;
17
+ files: readonly LoadedTemplateFile[];
18
+ }
19
+ export declare function defaultTemplateDirectory(): string;
20
+ export declare function loadTemplate(directory?: string): Promise<LoadedTemplate>;
21
+ export declare function validateTemplatePath(path: string): void;
22
+ export declare function sha256(content: string | Buffer): string;
23
+ //# sourceMappingURL=template-manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-manifest.d.ts","sourceRoot":"","sources":["../../src/services/template-manifest.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,CAAC,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,oBAAoB,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,kBAAmB,SAAQ,oBAAoB;IAC9D,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,KAAK,EAAE,SAAS,kBAAkB,EAAE,CAAC;CACtC;AAED,wBAAgB,wBAAwB,IAAI,MAAM,CAEjD;AAED,wBAAsB,YAAY,CAChC,SAAS,SAA6B,GACrC,OAAO,CAAC,cAAc,CAAC,CAmBzB;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAmBvD;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAEvD"}