@neetru/cli 2.29.0 → 2.31.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.
- package/CHANGELOG.md +52 -0
- package/README.md +61 -17
- package/dist/commands/deploy.d.ts +45 -0
- package/dist/commands/deploy.js +134 -1
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/dev-up.d.ts +7 -5
- package/dist/commands/dev-up.js +24 -23
- package/dist/commands/dev-up.js.map +1 -1
- package/dist/commands/docs-produto.d.ts +65 -0
- package/dist/commands/docs-produto.js +322 -0
- package/dist/commands/docs-produto.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.js +7 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/new.d.ts +2 -0
- package/dist/commands/new.js +2 -0
- package/dist/commands/new.js.map +1 -1
- package/dist/index.js +72 -6
- package/dist/index.js.map +1 -1
- package/dist/lib/api-client.d.ts +8 -1
- package/dist/lib/api-client.js +20 -2
- package/dist/lib/api-client.js.map +1 -1
- package/dist/lib/compose-generator.d.ts +13 -9
- package/dist/lib/compose-generator.js +28 -60
- package/dist/lib/compose-generator.js.map +1 -1
- package/dist/lib/config-schema.d.ts +40 -6
- package/dist/lib/config-schema.js +11 -0
- package/dist/lib/config-schema.js.map +1 -1
- package/dist/lib/product-docs/check.d.ts +62 -0
- package/dist/lib/product-docs/check.js +489 -0
- package/dist/lib/product-docs/check.js.map +1 -0
- package/dist/lib/product-docs/config.d.ts +66 -0
- package/dist/lib/product-docs/config.js +234 -0
- package/dist/lib/product-docs/config.js.map +1 -0
- package/dist/lib/product-docs/dates.d.ts +17 -0
- package/dist/lib/product-docs/dates.js +41 -0
- package/dist/lib/product-docs/dates.js.map +1 -0
- package/dist/lib/product-docs/frontmatter.d.ts +43 -0
- package/dist/lib/product-docs/frontmatter.js +302 -0
- package/dist/lib/product-docs/frontmatter.js.map +1 -0
- package/dist/lib/product-docs/git.d.ts +16 -0
- package/dist/lib/product-docs/git.js +92 -0
- package/dist/lib/product-docs/git.js.map +1 -0
- package/dist/lib/product-docs/markdown.d.ts +27 -0
- package/dist/lib/product-docs/markdown.js +98 -0
- package/dist/lib/product-docs/markdown.js.map +1 -0
- package/dist/lib/product-docs/ops.d.ts +133 -0
- package/dist/lib/product-docs/ops.js +975 -0
- package/dist/lib/product-docs/ops.js.map +1 -0
- package/dist/lib/product-docs/structure.d.ts +61 -0
- package/dist/lib/product-docs/structure.js +239 -0
- package/dist/lib/product-docs/structure.js.map +1 -0
- package/dist/lib/product-docs/sync.d.ts +101 -0
- package/dist/lib/product-docs/sync.js +313 -0
- package/dist/lib/product-docs/sync.js.map +1 -0
- package/dist/lib/product-docs/taxonomy.d.ts +46 -0
- package/dist/lib/product-docs/taxonomy.js +163 -0
- package/dist/lib/product-docs/taxonomy.js.map +1 -0
- package/dist/lib/product-docs/templates.d.ts +53 -0
- package/dist/lib/product-docs/templates.js +245 -0
- package/dist/lib/product-docs/templates.js.map +1 -0
- package/dist/lib/public-secret-scan.d.ts +76 -0
- package/dist/lib/public-secret-scan.js +446 -0
- package/dist/lib/public-secret-scan.js.map +1 -0
- package/package.json +1 -1
- package/templates/dev/Dockerfile.agent +0 -39
- package/templates/dev/agent-entrypoint.sh +0 -41
- package/templates/dev/docker-compose.dev.yml +0 -63
|
@@ -20,17 +20,21 @@ export declare function resolveDbConfig(engine: string): ComposeDbConfig | null;
|
|
|
20
20
|
export interface ComposeGeneratorInput {
|
|
21
21
|
productSlug: string;
|
|
22
22
|
dbEngine: string;
|
|
23
|
-
appPort?: number;
|
|
24
|
-
coreUrl?: string;
|
|
25
|
-
firebaseProject?: string;
|
|
26
|
-
firebaseApiKey?: string;
|
|
27
23
|
}
|
|
28
24
|
/**
|
|
29
|
-
*
|
|
30
|
-
*
|
|
25
|
+
* URL de conexão do host (onde o app roda com `npm run dev`) para o banco do
|
|
26
|
+
* compose. `null` quando a engine não usa URL (Firestore usa o emulador).
|
|
31
27
|
*/
|
|
32
|
-
export declare function
|
|
28
|
+
export declare function localDatabaseUrl(dbEngine: string): string | null;
|
|
33
29
|
/**
|
|
34
|
-
*
|
|
30
|
+
* Gera o conteúdo do `neetru-compose.dev.yml` baseado na config do produto.
|
|
31
|
+
*
|
|
32
|
+
* Só o BANCO sobe em container. O agente ficou de fora de propósito
|
|
33
|
+
* (2026-10-09): o serviço `agent` antigo dependia de um `Dockerfile.agent` que
|
|
34
|
+
* nenhum caminho do `dev up` gravava (o compose falhava no build e nem o banco
|
|
35
|
+
* subia), rodava o binário do agente com `node` (é executável `pkg`, não JS) e
|
|
36
|
+
* ligava um `NEETRU_DEV_MODE` que o agente não implementa — além de montar o
|
|
37
|
+
* `docker.sock` do host num binário baixado. O agente local volta quando a
|
|
38
|
+
* sprint dev-suite entregar o modo dev no próprio agente.
|
|
35
39
|
*/
|
|
36
|
-
export declare function
|
|
40
|
+
export declare function generateComposeDev(input: ComposeGeneratorInput): string;
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import * as fs from 'node:fs';
|
|
2
|
-
import * as path from 'node:path';
|
|
3
1
|
/**
|
|
4
2
|
* Mapeia engine de banco → config Docker Compose.
|
|
5
3
|
* Usa imagens oficiais — mesmas engines que rodam em produção na VM.
|
|
@@ -57,12 +55,35 @@ export function resolveDbConfig(engine) {
|
|
|
57
55
|
return configs['vm-postgres-single'] ?? null; // default
|
|
58
56
|
}
|
|
59
57
|
/**
|
|
60
|
-
*
|
|
61
|
-
*
|
|
58
|
+
* URL de conexão do host (onde o app roda com `npm run dev`) para o banco do
|
|
59
|
+
* compose. `null` quando a engine não usa URL (Firestore usa o emulador).
|
|
60
|
+
*/
|
|
61
|
+
export function localDatabaseUrl(dbEngine) {
|
|
62
|
+
const db = resolveDbConfig(dbEngine) ?? resolveDbConfig('vm-postgres-single');
|
|
63
|
+
switch (db.internalPort) {
|
|
64
|
+
case 5432:
|
|
65
|
+
return `postgresql://postgres:neetru_dev@localhost:${db.port}/app`;
|
|
66
|
+
case 3306:
|
|
67
|
+
return `mysql://root:neetru_dev@localhost:${db.port}/app`;
|
|
68
|
+
case 27017:
|
|
69
|
+
return `mongodb://localhost:${db.port}/app`;
|
|
70
|
+
default:
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Gera o conteúdo do `neetru-compose.dev.yml` baseado na config do produto.
|
|
76
|
+
*
|
|
77
|
+
* Só o BANCO sobe em container. O agente ficou de fora de propósito
|
|
78
|
+
* (2026-10-09): o serviço `agent` antigo dependia de um `Dockerfile.agent` que
|
|
79
|
+
* nenhum caminho do `dev up` gravava (o compose falhava no build e nem o banco
|
|
80
|
+
* subia), rodava o binário do agente com `node` (é executável `pkg`, não JS) e
|
|
81
|
+
* ligava um `NEETRU_DEV_MODE` que o agente não implementa — além de montar o
|
|
82
|
+
* `docker.sock` do host num binário baixado. O agente local volta quando a
|
|
83
|
+
* sprint dev-suite entregar o modo dev no próprio agente.
|
|
62
84
|
*/
|
|
63
85
|
export function generateComposeDev(input) {
|
|
64
86
|
const db = resolveDbConfig(input.dbEngine) ?? resolveDbConfig('vm-postgres-single');
|
|
65
|
-
const appPort = input.appPort ?? 3000;
|
|
66
87
|
// Bloco `environment:` só entra quando há vars — senão vira `environment:`
|
|
67
88
|
// vazio, que o docker compose rejeita ("environment must be a mapping").
|
|
68
89
|
// Firestore (env: {}) caía nisso → `dev up` firestore gerava compose inválido.
|
|
@@ -76,8 +97,9 @@ export function generateComposeDev(input) {
|
|
|
76
97
|
` timeout: ${db.healthcheck.timeout}`,
|
|
77
98
|
` retries: ${db.healthcheck.retries}`,
|
|
78
99
|
].join('\n');
|
|
79
|
-
return `# Neetru Dev Local —
|
|
100
|
+
return `# Neetru Dev Local — banco do produto ${input.productSlug} (${db.engine})
|
|
80
101
|
# Gerado por \`neetru dev up\`. Modifique o neetru.config.json e rode novamente.
|
|
102
|
+
# O app roda fora do container, com \`npm run dev\`.
|
|
81
103
|
|
|
82
104
|
services:
|
|
83
105
|
database:
|
|
@@ -90,63 +112,9 @@ ${dbEnvBlock} ports:
|
|
|
90
112
|
healthcheck:
|
|
91
113
|
${dbHealthcheck}
|
|
92
114
|
restart: unless-stopped
|
|
93
|
-
networks:
|
|
94
|
-
- neetru-dev-net
|
|
95
|
-
|
|
96
|
-
agent:
|
|
97
|
-
build:
|
|
98
|
-
context: .
|
|
99
|
-
dockerfile: Dockerfile.agent
|
|
100
|
-
container_name: neetru-dev-agent
|
|
101
|
-
environment:
|
|
102
|
-
- NEETRU_SERVER_ID=dev-local-${input.productSlug}
|
|
103
|
-
- NEETRU_CORE_URL=${input.coreUrl ?? 'https://core.neetru.com'}
|
|
104
|
-
- NEETRU_FIREBASE_PROJECT=${input.firebaseProject ?? 'neetru'}
|
|
105
|
-
- NEETRU_FIREBASE_API_KEY=${input.firebaseApiKey ?? ''}
|
|
106
|
-
- NEETRU_DEV_MODE=true
|
|
107
|
-
- NEETRU_APP_PORT=${appPort}
|
|
108
|
-
- DATABASE_URL=${db.internalPort === 5432 ? 'postgresql://postgres:neetru_dev@database:5432/app' : db.internalPort === 3306 ? 'mysql://root:neetru_dev@database:3306/app' : db.internalPort === 27017 ? 'mongodb://database:27017/app' : ''}
|
|
109
|
-
ports:
|
|
110
|
-
- "${appPort}:${appPort}"
|
|
111
|
-
volumes:
|
|
112
|
-
- /var/run/docker.sock:/var/run/docker.sock
|
|
113
|
-
- neetru-agent-data:/var/cache/neetru
|
|
114
|
-
- .:/app/product:cached
|
|
115
|
-
depends_on:
|
|
116
|
-
database:
|
|
117
|
-
condition: service_healthy
|
|
118
|
-
restart: unless-stopped
|
|
119
|
-
networks:
|
|
120
|
-
- neetru-dev-net
|
|
121
115
|
|
|
122
116
|
volumes:
|
|
123
117
|
neetru-db-data:
|
|
124
|
-
neetru-agent-data:
|
|
125
|
-
|
|
126
|
-
networks:
|
|
127
|
-
neetru-dev-net:
|
|
128
|
-
driver: bridge
|
|
129
118
|
`;
|
|
130
119
|
}
|
|
131
|
-
/**
|
|
132
|
-
* Escreve o compose + Dockerfile.agent no diretório do projeto.
|
|
133
|
-
*/
|
|
134
|
-
export function writeComposeDev(cwd, input) {
|
|
135
|
-
const composePath = path.join(cwd, 'neetru-compose.dev.yml');
|
|
136
|
-
const dockerfilePath = path.join(cwd, 'Dockerfile.agent');
|
|
137
|
-
const entrypointPath = path.join(cwd, 'agent-entrypoint.sh');
|
|
138
|
-
const compose = generateComposeDev(input);
|
|
139
|
-
fs.writeFileSync(composePath, compose, 'utf8');
|
|
140
|
-
// Copia o Dockerfile.agent do template embutido
|
|
141
|
-
const templateDir = path.join(path.dirname(new URL(import.meta.url).pathname), '..', '..', 'templates', 'dev');
|
|
142
|
-
// Em modo pkg/compilado, busca do __dirname ou do diretório do CLI
|
|
143
|
-
const altTemplate = path.join(process.cwd(), 'node_modules', '@neetru', 'cli', 'templates', 'dev');
|
|
144
|
-
const dockerfileSrc = fs.existsSync(path.join(templateDir, 'Dockerfile.agent'))
|
|
145
|
-
? path.join(templateDir, 'Dockerfile.agent')
|
|
146
|
-
: path.join(altTemplate, 'Dockerfile.agent');
|
|
147
|
-
if (fs.existsSync(dockerfileSrc)) {
|
|
148
|
-
fs.copyFileSync(dockerfileSrc, dockerfilePath);
|
|
149
|
-
}
|
|
150
|
-
return composePath;
|
|
151
|
-
}
|
|
152
120
|
//# sourceMappingURL=compose-generator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose-generator.js","sourceRoot":"","sources":["../../src/lib/compose-generator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"compose-generator.js","sourceRoot":"","sources":["../../src/lib/compose-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -89,15 +89,38 @@ export declare const neetruConfigSchema: z.ZodObject<{
|
|
|
89
89
|
engine?: "firestore-instance" | "vm-postgres-single" | "vm-mysql-single" | "nosql-vm" | undefined;
|
|
90
90
|
dbId?: string | undefined;
|
|
91
91
|
}>>;
|
|
92
|
+
/** Protocolo de docs de produto v1 (`neetru docs init` grava; ver lib/product-docs/config.ts). */
|
|
93
|
+
docs: z.ZodOptional<z.ZodObject<{
|
|
94
|
+
protocolVersion: z.ZodOptional<z.ZodNumber>;
|
|
95
|
+
root: z.ZodOptional<z.ZodString>;
|
|
96
|
+
publish: z.ZodOptional<z.ZodBoolean>;
|
|
97
|
+
publishOnDeploy: z.ZodOptional<z.ZodBoolean>;
|
|
98
|
+
api: z.ZodOptional<z.ZodBoolean>;
|
|
99
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
100
|
+
protocolVersion: z.ZodOptional<z.ZodNumber>;
|
|
101
|
+
root: z.ZodOptional<z.ZodString>;
|
|
102
|
+
publish: z.ZodOptional<z.ZodBoolean>;
|
|
103
|
+
publishOnDeploy: z.ZodOptional<z.ZodBoolean>;
|
|
104
|
+
api: z.ZodOptional<z.ZodBoolean>;
|
|
105
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
106
|
+
protocolVersion: z.ZodOptional<z.ZodNumber>;
|
|
107
|
+
root: z.ZodOptional<z.ZodString>;
|
|
108
|
+
publish: z.ZodOptional<z.ZodBoolean>;
|
|
109
|
+
publishOnDeploy: z.ZodOptional<z.ZodBoolean>;
|
|
110
|
+
api: z.ZodOptional<z.ZodBoolean>;
|
|
111
|
+
}, z.ZodTypeAny, "passthrough">>>;
|
|
92
112
|
}, "strip", z.ZodTypeAny, {
|
|
93
113
|
name: string;
|
|
94
114
|
slug: string;
|
|
95
115
|
runtime: "nextjs" | "node-api";
|
|
96
116
|
$schema?: string | undefined;
|
|
97
117
|
tenantId?: string | undefined;
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
118
|
+
docs?: z.objectOutputType<{
|
|
119
|
+
protocolVersion: z.ZodOptional<z.ZodNumber>;
|
|
120
|
+
root: z.ZodOptional<z.ZodString>;
|
|
121
|
+
publish: z.ZodOptional<z.ZodBoolean>;
|
|
122
|
+
publishOnDeploy: z.ZodOptional<z.ZodBoolean>;
|
|
123
|
+
api: z.ZodOptional<z.ZodBoolean>;
|
|
101
124
|
}, z.ZodTypeAny, "passthrough"> | undefined;
|
|
102
125
|
publish?: {
|
|
103
126
|
description: string;
|
|
@@ -108,6 +131,10 @@ export declare const neetruConfigSchema: z.ZodObject<{
|
|
|
108
131
|
ctaHref?: string | undefined;
|
|
109
132
|
ctaLabel?: string | undefined;
|
|
110
133
|
} | undefined;
|
|
134
|
+
deploy?: z.objectOutputType<{
|
|
135
|
+
region: z.ZodOptional<z.ZodString>;
|
|
136
|
+
serviceName: z.ZodOptional<z.ZodString>;
|
|
137
|
+
}, z.ZodTypeAny, "passthrough"> | undefined;
|
|
111
138
|
database?: {
|
|
112
139
|
engine?: "firestore-instance" | "vm-postgres-single" | "vm-mysql-single" | "nosql-vm" | undefined;
|
|
113
140
|
dbId?: string | undefined;
|
|
@@ -118,9 +145,12 @@ export declare const neetruConfigSchema: z.ZodObject<{
|
|
|
118
145
|
runtime: "nextjs" | "node-api";
|
|
119
146
|
$schema?: string | undefined;
|
|
120
147
|
tenantId?: string | undefined;
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
148
|
+
docs?: z.objectInputType<{
|
|
149
|
+
protocolVersion: z.ZodOptional<z.ZodNumber>;
|
|
150
|
+
root: z.ZodOptional<z.ZodString>;
|
|
151
|
+
publish: z.ZodOptional<z.ZodBoolean>;
|
|
152
|
+
publishOnDeploy: z.ZodOptional<z.ZodBoolean>;
|
|
153
|
+
api: z.ZodOptional<z.ZodBoolean>;
|
|
124
154
|
}, z.ZodTypeAny, "passthrough"> | undefined;
|
|
125
155
|
publish?: {
|
|
126
156
|
description: string;
|
|
@@ -131,6 +161,10 @@ export declare const neetruConfigSchema: z.ZodObject<{
|
|
|
131
161
|
ctaHref?: string | undefined;
|
|
132
162
|
ctaLabel?: string | undefined;
|
|
133
163
|
} | undefined;
|
|
164
|
+
deploy?: z.objectInputType<{
|
|
165
|
+
region: z.ZodOptional<z.ZodString>;
|
|
166
|
+
serviceName: z.ZodOptional<z.ZodString>;
|
|
167
|
+
}, z.ZodTypeAny, "passthrough"> | undefined;
|
|
134
168
|
database?: {
|
|
135
169
|
engine?: "firestore-instance" | "vm-postgres-single" | "vm-mysql-single" | "nosql-vm" | undefined;
|
|
136
170
|
dbId?: string | undefined;
|
|
@@ -42,6 +42,17 @@ export const neetruConfigSchema = z.object({
|
|
|
42
42
|
engine: z.enum(['vm-postgres-single', 'vm-mysql-single', 'nosql-vm', 'firestore-instance']).optional(),
|
|
43
43
|
dbId: z.string().optional(),
|
|
44
44
|
}).optional(),
|
|
45
|
+
/** Protocolo de docs de produto v1 (`neetru docs init` grava; ver lib/product-docs/config.ts). */
|
|
46
|
+
docs: z
|
|
47
|
+
.object({
|
|
48
|
+
protocolVersion: z.number().int().positive().optional(),
|
|
49
|
+
root: z.string().optional(),
|
|
50
|
+
publish: z.boolean().optional(),
|
|
51
|
+
publishOnDeploy: z.boolean().optional(),
|
|
52
|
+
api: z.boolean().optional(),
|
|
53
|
+
})
|
|
54
|
+
.passthrough()
|
|
55
|
+
.optional(),
|
|
45
56
|
});
|
|
46
57
|
export const catalogUpsertPayloadSchema = z.object({
|
|
47
58
|
slug: slugSchema,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-schema.js","sourceRoot":"","sources":["../../src/lib/config-schema.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config-schema.js","sourceRoot":"","sources":["../../src/lib/config-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { type DocsTaxonomy } from './taxonomy.js';
|
|
2
|
+
import { type ProductRepo } from './config.js';
|
|
3
|
+
export type Level = 'erro' | 'aviso' | 'sugestao';
|
|
4
|
+
export interface Finding {
|
|
5
|
+
/** Caminho relativo à raiz do repositório, com `/`. */
|
|
6
|
+
file: string;
|
|
7
|
+
line?: number;
|
|
8
|
+
code: string;
|
|
9
|
+
level: Level;
|
|
10
|
+
message: string;
|
|
11
|
+
}
|
|
12
|
+
export interface FileContext {
|
|
13
|
+
taxonomy: DocsTaxonomy;
|
|
14
|
+
slug: string;
|
|
15
|
+
/** Caminho relativo à raiz do repo da pasta de docs (ex.: `docs`). */
|
|
16
|
+
docsRoot: string;
|
|
17
|
+
/** Existe este caminho (relativo à raiz do repo)? */
|
|
18
|
+
exists: (repoRel: string) => boolean;
|
|
19
|
+
legacyNames: Set<string>;
|
|
20
|
+
/** AAAA-MM-DD de hoje (injetável em teste). */
|
|
21
|
+
today: string;
|
|
22
|
+
/** O arquivo foi alterado na branch (LK001 vira erro). */
|
|
23
|
+
changed: boolean;
|
|
24
|
+
}
|
|
25
|
+
/** Valida UM doc. `relInDocs` é relativo à pasta de docs, com `/`. Função pura. */
|
|
26
|
+
export declare function checkDocFile(relInDocs: string, raw: string, ctx: FileContext): Finding[];
|
|
27
|
+
export interface CheckOptions {
|
|
28
|
+
/** Só os arquivos alterados contra a branch principal (catraca). */
|
|
29
|
+
changed?: boolean;
|
|
30
|
+
/** Aviso vira erro. */
|
|
31
|
+
strict?: boolean;
|
|
32
|
+
taxonomy: DocsTaxonomy;
|
|
33
|
+
today?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface CheckResult {
|
|
36
|
+
ok: boolean;
|
|
37
|
+
findings: Finding[];
|
|
38
|
+
counts: {
|
|
39
|
+
erro: number;
|
|
40
|
+
aviso: number;
|
|
41
|
+
sugestao: number;
|
|
42
|
+
};
|
|
43
|
+
filesChecked: number;
|
|
44
|
+
docsRoot: string;
|
|
45
|
+
changedBase?: string;
|
|
46
|
+
/** --changed pedido mas o git não respondeu: checou tudo. */
|
|
47
|
+
changedFallback?: boolean;
|
|
48
|
+
}
|
|
49
|
+
/** Lista os `.md` da pasta de docs (relativos a ela, com `/`). */
|
|
50
|
+
export declare function listDocFiles(repo: ProductRepo): Promise<string[]>;
|
|
51
|
+
/** Lê `docs/_nomes-legados.json` (array ou `{ arquivos: [...] }`). */
|
|
52
|
+
export declare function readLegacyNames(repo: ProductRepo): Set<string>;
|
|
53
|
+
/** Hoje no fuso dos docs (America/Sao_Paulo ou NEETRU_TZ) — nunca UTC. */
|
|
54
|
+
export { todayIso } from './dates.js';
|
|
55
|
+
/** Checagens do repositório inteiro: mínimo do primeiro dia (PR002), README, CHANGELOG (PR004). */
|
|
56
|
+
export declare function checkRepoLevel(repo: ProductRepo): Finding[];
|
|
57
|
+
export declare function summarize(findings: Finding[], strict: boolean): {
|
|
58
|
+
ok: boolean;
|
|
59
|
+
counts: CheckResult['counts'];
|
|
60
|
+
};
|
|
61
|
+
/** Roda o validador no repositório do produto. Nunca lança por conteúdo de doc. */
|
|
62
|
+
export declare function checkProductDocs(repo: ProductRepo, opts: CheckOptions): Promise<CheckResult>;
|