@noclaf/cli 0.7.0 → 0.9.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/README.md +26 -84
- package/dist/app.js +13 -0
- package/dist/app.js.map +1 -0
- package/dist/brand.js +9 -49
- package/dist/brand.js.map +1 -1
- package/dist/cli.js +3 -37
- package/dist/cli.js.map +1 -1
- package/dist/mcp-server.js +3 -187
- package/dist/mcp-server.js.map +1 -1
- package/package.json +8 -17
- package/dist/adapters/supabase/allocation-gateway.js +0 -291
- package/dist/adapters/supabase/allocation-gateway.js.map +0 -1
- package/dist/adapters/supabase/analytics-gateway.js +0 -18
- package/dist/adapters/supabase/analytics-gateway.js.map +0 -1
- package/dist/adapters/supabase/calendar-gateway.js +0 -48
- package/dist/adapters/supabase/calendar-gateway.js.map +0 -1
- package/dist/adapters/supabase/calendar-write-gateway.js +0 -35
- package/dist/adapters/supabase/calendar-write-gateway.js.map +0 -1
- package/dist/adapters/supabase/client.js +0 -136
- package/dist/adapters/supabase/client.js.map +0 -1
- package/dist/adapters/supabase/context-gateway.js +0 -23
- package/dist/adapters/supabase/context-gateway.js.map +0 -1
- package/dist/adapters/supabase/gateway.js +0 -26
- package/dist/adapters/supabase/gateway.js.map +0 -1
- package/dist/adapters/supabase/release-gateway.js +0 -61
- package/dist/adapters/supabase/release-gateway.js.map +0 -1
- package/dist/adapters/supabase/sprint-gateway.js +0 -59
- package/dist/adapters/supabase/sprint-gateway.js.map +0 -1
- package/dist/adapters/supabase/task-gateway.js +0 -533
- package/dist/adapters/supabase/task-gateway.js.map +0 -1
- package/dist/auth.js +0 -141
- package/dist/auth.js.map +0 -1
- package/dist/cli/commands/auth.js +0 -127
- package/dist/cli/commands/auth.js.map +0 -1
- package/dist/cli/commands/clean.js +0 -120
- package/dist/cli/commands/clean.js.map +0 -1
- package/dist/cli/commands/completion.js +0 -114
- package/dist/cli/commands/completion.js.map +0 -1
- package/dist/cli/commands/exec.js +0 -69
- package/dist/cli/commands/exec.js.map +0 -1
- package/dist/cli/commands/init/analyze-step.js +0 -21
- package/dist/cli/commands/init/analyze-step.js.map +0 -1
- package/dist/cli/commands/init/apply-answers.js +0 -122
- package/dist/cli/commands/init/apply-answers.js.map +0 -1
- package/dist/cli/commands/init/apply-step.js +0 -165
- package/dist/cli/commands/init/apply-step.js.map +0 -1
- package/dist/cli/commands/init/auth-step.js +0 -48
- package/dist/cli/commands/init/auth-step.js.map +0 -1
- package/dist/cli/commands/init/boilerplate-step.js +0 -20
- package/dist/cli/commands/init/boilerplate-step.js.map +0 -1
- package/dist/cli/commands/init/clients-step.js +0 -78
- package/dist/cli/commands/init/clients-step.js.map +0 -1
- package/dist/cli/commands/init/context-step.js +0 -81
- package/dist/cli/commands/init/context-step.js.map +0 -1
- package/dist/cli/commands/init/describe-step.js +0 -68
- package/dist/cli/commands/init/describe-step.js.map +0 -1
- package/dist/cli/commands/init/index.js +0 -98
- package/dist/cli/commands/init/index.js.map +0 -1
- package/dist/cli/commands/init/mode.js +0 -18
- package/dist/cli/commands/init/mode.js.map +0 -1
- package/dist/cli/commands/init/progress.js +0 -60
- package/dist/cli/commands/init/progress.js.map +0 -1
- package/dist/cli/commands/init/project-step.js +0 -133
- package/dist/cli/commands/init/project-step.js.map +0 -1
- package/dist/cli/commands/init/provision-step.js +0 -103
- package/dist/cli/commands/init/provision-step.js.map +0 -1
- package/dist/cli/commands/map.js +0 -18
- package/dist/cli/commands/map.js.map +0 -1
- package/dist/cli/commands/plan.js +0 -45
- package/dist/cli/commands/plan.js.map +0 -1
- package/dist/cli/commands/skills.js +0 -23
- package/dist/cli/commands/skills.js.map +0 -1
- package/dist/cli/commands/sync.js +0 -319
- package/dist/cli/commands/sync.js.map +0 -1
- package/dist/cli/commands/validate-plan.js +0 -42
- package/dist/cli/commands/validate-plan.js.map +0 -1
- package/dist/cli/commands/wave.js +0 -57
- package/dist/cli/commands/wave.js.map +0 -1
- package/dist/cli/copy/auth.json +0 -6
- package/dist/cli/copy/flows.json +0 -6
- package/dist/cli/copy/init.json +0 -20
- package/dist/cli/copy/sync.json +0 -3
- package/dist/cli/copy.js +0 -23
- package/dist/cli/copy.js.map +0 -1
- package/dist/cli/flows/clients.js +0 -130
- package/dist/cli/flows/clients.js.map +0 -1
- package/dist/cli/flows/completion.js +0 -63
- package/dist/cli/flows/completion.js.map +0 -1
- package/dist/cli/flows/dependencies.js +0 -114
- package/dist/cli/flows/dependencies.js.map +0 -1
- package/dist/cli/flows/sections.js +0 -85
- package/dist/cli/flows/sections.js.map +0 -1
- package/dist/cli/flows/user-config.js +0 -37
- package/dist/cli/flows/user-config.js.map +0 -1
- package/dist/cli/ui/render.js +0 -239
- package/dist/cli/ui/render.js.map +0 -1
- package/dist/cli/ui/report.js +0 -130
- package/dist/cli/ui/report.js.map +0 -1
- package/dist/config.js +0 -289
- package/dist/config.js.map +0 -1
- package/dist/constants.js +0 -9
- package/dist/constants.js.map +0 -1
- package/dist/core/ports.js +0 -2
- package/dist/core/ports.js.map +0 -1
- package/dist/core/types.js +0 -5
- package/dist/core/types.js.map +0 -1
- package/dist/database.types.js +0 -11
- package/dist/database.types.js.map +0 -1
- package/dist/lib/active-project.js +0 -28
- package/dist/lib/active-project.js.map +0 -1
- package/dist/lib/autopull.js +0 -13
- package/dist/lib/autopull.js.map +0 -1
- package/dist/lib/boilerplate-scaffold.js +0 -65
- package/dist/lib/boilerplate-scaffold.js.map +0 -1
- package/dist/lib/boilerplates.js +0 -61
- package/dist/lib/boilerplates.js.map +0 -1
- package/dist/lib/calendar-logic.js +0 -59
- package/dist/lib/calendar-logic.js.map +0 -1
- package/dist/lib/calendar-write-logic.js +0 -6
- package/dist/lib/calendar-write-logic.js.map +0 -1
- package/dist/lib/client-configs.js +0 -191
- package/dist/lib/client-configs.js.map +0 -1
- package/dist/lib/client-install.js +0 -40
- package/dist/lib/client-install.js.map +0 -1
- package/dist/lib/colors.js +0 -92
- package/dist/lib/colors.js.map +0 -1
- package/dist/lib/cowork-extension.js +0 -143
- package/dist/lib/cowork-extension.js.map +0 -1
- package/dist/lib/dates.js +0 -21
- package/dist/lib/dates.js.map +0 -1
- package/dist/lib/dependencies.js +0 -145
- package/dist/lib/dependencies.js.map +0 -1
- package/dist/lib/dependency-install.js +0 -163
- package/dist/lib/dependency-install.js.map +0 -1
- package/dist/lib/duration.js +0 -5
- package/dist/lib/duration.js.map +0 -1
- package/dist/lib/exec-delegate.js +0 -218
- package/dist/lib/exec-delegate.js.map +0 -1
- package/dist/lib/exec-engines.js +0 -90
- package/dist/lib/exec-engines.js.map +0 -1
- package/dist/lib/exec-events.js +0 -87
- package/dist/lib/exec-events.js.map +0 -1
- package/dist/lib/exec-translators.js +0 -198
- package/dist/lib/exec-translators.js.map +0 -1
- package/dist/lib/file-merge.js +0 -33
- package/dist/lib/file-merge.js.map +0 -1
- package/dist/lib/git-exposure.js +0 -35
- package/dist/lib/git-exposure.js.map +0 -1
- package/dist/lib/harness.js +0 -127
- package/dist/lib/harness.js.map +0 -1
- package/dist/lib/hooks.js +0 -216
- package/dist/lib/hooks.js.map +0 -1
- package/dist/lib/patterns.js +0 -25
- package/dist/lib/patterns.js.map +0 -1
- package/dist/lib/pg-error.js +0 -53
- package/dist/lib/pg-error.js.map +0 -1
- package/dist/lib/plan-delegate.js +0 -117
- package/dist/lib/plan-delegate.js.map +0 -1
- package/dist/lib/project-context.js +0 -151
- package/dist/lib/project-context.js.map +0 -1
- package/dist/lib/prompts.js +0 -69
- package/dist/lib/prompts.js.map +0 -1
- package/dist/lib/provision-apply.js +0 -220
- package/dist/lib/provision-apply.js.map +0 -1
- package/dist/lib/provision-collect.js +0 -47
- package/dist/lib/provision-collect.js.map +0 -1
- package/dist/lib/provision.js +0 -45
- package/dist/lib/provision.js.map +0 -1
- package/dist/lib/release-logic.js +0 -10
- package/dist/lib/release-logic.js.map +0 -1
- package/dist/lib/repo-map.js +0 -176
- package/dist/lib/repo-map.js.map +0 -1
- package/dist/lib/require-config.js +0 -32
- package/dist/lib/require-config.js.map +0 -1
- package/dist/lib/rules.js +0 -146
- package/dist/lib/rules.js.map +0 -1
- package/dist/lib/sections.js +0 -89
- package/dist/lib/sections.js.map +0 -1
- package/dist/lib/skill-agent.js +0 -44
- package/dist/lib/skill-agent.js.map +0 -1
- package/dist/lib/skill-serve.js +0 -128
- package/dist/lib/skill-serve.js.map +0 -1
- package/dist/lib/skills-cache.js +0 -99
- package/dist/lib/skills-cache.js.map +0 -1
- package/dist/lib/skills.js +0 -237
- package/dist/lib/skills.js.map +0 -1
- package/dist/lib/sprint-deadline.js +0 -28
- package/dist/lib/sprint-deadline.js.map +0 -1
- package/dist/lib/sprint-logic.js +0 -31
- package/dist/lib/sprint-logic.js.map +0 -1
- package/dist/lib/targets.js +0 -150
- package/dist/lib/targets.js.map +0 -1
- package/dist/lib/task-history.js +0 -15
- package/dist/lib/task-history.js.map +0 -1
- package/dist/lib/telemetry.js +0 -51
- package/dist/lib/telemetry.js.map +0 -1
- package/dist/lib/tool-result.js +0 -15
- package/dist/lib/tool-result.js.map +0 -1
- package/dist/lib/validate-plan-delegate.js +0 -106
- package/dist/lib/validate-plan-delegate.js.map +0 -1
- package/dist/lib/version-check.js +0 -89
- package/dist/lib/version-check.js.map +0 -1
- package/dist/lib/wave-scheduler.js +0 -95
- package/dist/lib/wave-scheduler.js.map +0 -1
- package/dist/session-factory.js +0 -19
- package/dist/session-factory.js.map +0 -1
- package/dist/spinner.js +0 -12
- package/dist/spinner.js.map +0 -1
- package/dist/tools/activate-sprint.js +0 -44
- package/dist/tools/activate-sprint.js.map +0 -1
- package/dist/tools/add-checklist.js +0 -63
- package/dist/tools/add-checklist.js.map +0 -1
- package/dist/tools/add-holiday.js +0 -41
- package/dist/tools/add-holiday.js.map +0 -1
- package/dist/tools/add-home-office.js +0 -31
- package/dist/tools/add-home-office.js.map +0 -1
- package/dist/tools/add-vacation.js +0 -39
- package/dist/tools/add-vacation.js.map +0 -1
- package/dist/tools/attach-pr.js +0 -97
- package/dist/tools/attach-pr.js.map +0 -1
- package/dist/tools/comment-task.js +0 -72
- package/dist/tools/comment-task.js.map +0 -1
- package/dist/tools/create-release.js +0 -46
- package/dist/tools/create-release.js.map +0 -1
- package/dist/tools/create-sprint.js +0 -66
- package/dist/tools/create-sprint.js.map +0 -1
- package/dist/tools/create-task.js +0 -174
- package/dist/tools/create-task.js.map +0 -1
- package/dist/tools/delegate-exec.js +0 -63
- package/dist/tools/delegate-exec.js.map +0 -1
- package/dist/tools/end-allocation.js +0 -38
- package/dist/tools/end-allocation.js.map +0 -1
- package/dist/tools/end-sprint.js +0 -37
- package/dist/tools/end-sprint.js.map +0 -1
- package/dist/tools/end-task-allocation.js +0 -60
- package/dist/tools/end-task-allocation.js.map +0 -1
- package/dist/tools/exec-status.js +0 -45
- package/dist/tools/exec-status.js.map +0 -1
- package/dist/tools/finalize-release.js +0 -45
- package/dist/tools/finalize-release.js.map +0 -1
- package/dist/tools/get-active-allocation.js +0 -69
- package/dist/tools/get-active-allocation.js.map +0 -1
- package/dist/tools/get-calendar.js +0 -40
- package/dist/tools/get-calendar.js.map +0 -1
- package/dist/tools/get-context.js +0 -48
- package/dist/tools/get-context.js.map +0 -1
- package/dist/tools/get-sprint.js +0 -38
- package/dist/tools/get-sprint.js.map +0 -1
- package/dist/tools/get-task.js +0 -146
- package/dist/tools/get-task.js.map +0 -1
- package/dist/tools/index.js +0 -84
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/list-my-allocations.js +0 -71
- package/dist/tools/list-my-allocations.js.map +0 -1
- package/dist/tools/list-projects.js +0 -38
- package/dist/tools/list-projects.js.map +0 -1
- package/dist/tools/list-releases.js +0 -32
- package/dist/tools/list-releases.js.map +0 -1
- package/dist/tools/list-sprints.js +0 -30
- package/dist/tools/list-sprints.js.map +0 -1
- package/dist/tools/list-tasks.js +0 -95
- package/dist/tools/list-tasks.js.map +0 -1
- package/dist/tools/move-task.js +0 -82
- package/dist/tools/move-task.js.map +0 -1
- package/dist/tools/plan.js +0 -56
- package/dist/tools/plan.js.map +0 -1
- package/dist/tools/record-delivery.js +0 -100
- package/dist/tools/record-delivery.js.map +0 -1
- package/dist/tools/remove-holiday.js +0 -31
- package/dist/tools/remove-holiday.js.map +0 -1
- package/dist/tools/remove-home-office.js +0 -32
- package/dist/tools/remove-home-office.js.map +0 -1
- package/dist/tools/remove-vacation.js +0 -31
- package/dist/tools/remove-vacation.js.map +0 -1
- package/dist/tools/set-project.js +0 -52
- package/dist/tools/set-project.js.map +0 -1
- package/dist/tools/set-review.js +0 -132
- package/dist/tools/set-review.js.map +0 -1
- package/dist/tools/sprint-common.js +0 -13
- package/dist/tools/sprint-common.js.map +0 -1
- package/dist/tools/start-allocation.js +0 -32
- package/dist/tools/start-allocation.js.map +0 -1
- package/dist/tools/start-task-allocation.js +0 -83
- package/dist/tools/start-task-allocation.js.map +0 -1
- package/dist/tools/update-release.js +0 -58
- package/dist/tools/update-release.js.map +0 -1
- package/dist/tools/update-sprint.js +0 -56
- package/dist/tools/update-sprint.js.map +0 -1
- package/dist/tools/update-task.js +0 -183
- package/dist/tools/update-task.js.map +0 -1
- package/dist/tools/validate-plan.js +0 -58
- package/dist/tools/validate-plan.js.map +0 -1
- package/dist/version.js +0 -16
- package/dist/version.js.map +0 -1
package/dist/config.js
DELETED
|
@@ -1,289 +0,0 @@
|
|
|
1
|
-
import { readFileSync, writeFileSync, existsSync } from 'node:fs';
|
|
2
|
-
import { join, isAbsolute, dirname } from 'node:path';
|
|
3
|
-
import { PROJECT_CONFIG_FILE } from './constants.js';
|
|
4
|
-
import { brand, env } from './brand.js';
|
|
5
|
-
import { DEV_ROLE, GENERAL } from './lib/sections.js';
|
|
6
|
-
/** Arquivo de config do usuário — `noclaf.json` → `noclaf.user.json` (respeita o brand). */
|
|
7
|
-
export const USER_CONFIG_FILE = PROJECT_CONFIG_FILE.replace(/\.json$/, ".user.json");
|
|
8
|
-
export function getUserConfigPath(cwd = process.cwd()) {
|
|
9
|
-
const base = isAbsolute(cwd) ? cwd : join(process.cwd(), cwd);
|
|
10
|
-
return join(base, USER_CONFIG_FILE);
|
|
11
|
-
}
|
|
12
|
-
/** Lê as prefs do `noclaf.user.json` em `dir`, se houver (parse tolerante). */
|
|
13
|
-
export function readUserConfig(dir) {
|
|
14
|
-
const path = join(dir, USER_CONFIG_FILE);
|
|
15
|
-
if (!existsSync(path))
|
|
16
|
-
return {};
|
|
17
|
-
try {
|
|
18
|
-
const u = JSON.parse(readFileSync(path, "utf8"));
|
|
19
|
-
const user = {};
|
|
20
|
-
if (u.ide === "vscode" || u.ide === "xcode" || u.ide === "other")
|
|
21
|
-
user.ide = u.ide;
|
|
22
|
-
if (typeof u.max_parallelism === "number" && Number.isFinite(u.max_parallelism)) {
|
|
23
|
-
user.max_parallelism = u.max_parallelism;
|
|
24
|
-
}
|
|
25
|
-
return user;
|
|
26
|
-
}
|
|
27
|
-
catch {
|
|
28
|
-
return {}; // user file inválido → ignora
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
/** Parse leniente do bloco `selection` do noclaf.json. */
|
|
32
|
-
function parseSelection(value) {
|
|
33
|
-
if (!value || typeof value !== 'object')
|
|
34
|
-
return undefined;
|
|
35
|
-
const s = value;
|
|
36
|
-
const roles = Array.isArray(s.roles)
|
|
37
|
-
? s.roles.filter((r) => typeof r === 'string' && r.length > 0)
|
|
38
|
-
: [];
|
|
39
|
-
const stacks = {};
|
|
40
|
-
if (s.stacks && typeof s.stacks === 'object') {
|
|
41
|
-
for (const [area, stack] of Object.entries(s.stacks)) {
|
|
42
|
-
if (typeof stack === 'string' && stack.trim())
|
|
43
|
-
stacks[area] = stack.trim();
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
if (roles.length === 0 && Object.keys(stacks).length === 0)
|
|
47
|
-
return undefined;
|
|
48
|
-
return { roles, stacks };
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Migra o formato antigo (`sections: {profiles, fields}` + `rules: {área: stack}`) pra
|
|
52
|
-
* a `selection` unificada. `developer`→`dev`, `other`→`management`; cada field vira uma
|
|
53
|
-
* área com a stack do mapa `rules` (ou `general` se não houver). Retorna `undefined` se
|
|
54
|
-
* não há nada antigo.
|
|
55
|
-
*/
|
|
56
|
-
function migrateLegacySelection(obj) {
|
|
57
|
-
const sec = obj.sections;
|
|
58
|
-
const oldRules = (obj.rules ?? {});
|
|
59
|
-
if (!sec || typeof sec !== 'object')
|
|
60
|
-
return undefined;
|
|
61
|
-
const roles = [];
|
|
62
|
-
const profiles = Array.isArray(sec.profiles) ? sec.profiles : [];
|
|
63
|
-
if (profiles.includes('developer'))
|
|
64
|
-
roles.push(DEV_ROLE);
|
|
65
|
-
if (profiles.includes('other'))
|
|
66
|
-
roles.push('management');
|
|
67
|
-
const stacks = {};
|
|
68
|
-
const fields = Array.isArray(sec.fields) ? sec.fields : [];
|
|
69
|
-
for (const f of fields) {
|
|
70
|
-
if (typeof f !== 'string')
|
|
71
|
-
continue;
|
|
72
|
-
const stack = oldRules[f];
|
|
73
|
-
stacks[f] = typeof stack === 'string' && stack.trim() ? stack.trim() : GENERAL;
|
|
74
|
-
}
|
|
75
|
-
if (roles.length === 0 && Object.keys(stacks).length === 0)
|
|
76
|
-
return undefined;
|
|
77
|
-
return { roles, stacks };
|
|
78
|
-
}
|
|
79
|
-
export const UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
|
|
80
|
-
export function getProjectConfigPath(cwd = process.cwd()) {
|
|
81
|
-
return isAbsolute(cwd) ? join(cwd, PROJECT_CONFIG_FILE) : join(process.cwd(), cwd, PROJECT_CONFIG_FILE);
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Acha o `noclaf.json` subindo de `cwd` até a raiz — assim um agente rodando numa
|
|
85
|
-
* subpasta (ex.: `proj-x/backend/src`) ainda encontra o binding em `proj-x/backend`
|
|
86
|
-
* ou `proj-x`. O mais próximo vence (binding do repo tem precedência sobre o do pai).
|
|
87
|
-
*/
|
|
88
|
-
export function findProjectConfigPath(cwd = process.cwd()) {
|
|
89
|
-
let dir = isAbsolute(cwd) ? cwd : join(process.cwd(), cwd);
|
|
90
|
-
for (;;) {
|
|
91
|
-
const candidate = join(dir, PROJECT_CONFIG_FILE);
|
|
92
|
-
if (existsSync(candidate))
|
|
93
|
-
return candidate;
|
|
94
|
-
const parent = dirname(dir);
|
|
95
|
-
if (parent === dir)
|
|
96
|
-
return null;
|
|
97
|
-
dir = parent;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
/**
|
|
101
|
-
* ProjectConfig a partir de NOCLAF_PROJECT_ID / NOCLAF_REPOSITORY_ID — override
|
|
102
|
-
* opcional pro env do cliente MCP. O Cowork NÃO usa isto (projeto é por sessão).
|
|
103
|
-
* Retorna null se NOCLAF_PROJECT_ID não estiver definido.
|
|
104
|
-
*/
|
|
105
|
-
function loadProjectConfigFromEnv() {
|
|
106
|
-
const projectId = env('PROJECT_ID')?.trim();
|
|
107
|
-
if (!projectId)
|
|
108
|
-
return null;
|
|
109
|
-
if (!UUID_REGEX.test(projectId)) {
|
|
110
|
-
throw new Error('NOCLAF_PROJECT_ID não é um UUID válido.');
|
|
111
|
-
}
|
|
112
|
-
const config = { project_id: projectId };
|
|
113
|
-
const repositoryId = env('REPOSITORY_ID')?.trim();
|
|
114
|
-
if (repositoryId) {
|
|
115
|
-
if (!UUID_REGEX.test(repositoryId)) {
|
|
116
|
-
throw new Error('NOCLAF_REPOSITORY_ID deve ser um UUID válido.');
|
|
117
|
-
}
|
|
118
|
-
config.repository_id = repositoryId;
|
|
119
|
-
}
|
|
120
|
-
return config;
|
|
121
|
-
}
|
|
122
|
-
/** Lê e faz `JSON.parse` do `noclaf.json` em `path` — erros viram mensagens com o nome do arquivo. */
|
|
123
|
-
function readProjectConfigFile(path) {
|
|
124
|
-
let raw;
|
|
125
|
-
try {
|
|
126
|
-
raw = readFileSync(path, 'utf8');
|
|
127
|
-
}
|
|
128
|
-
catch (err) {
|
|
129
|
-
throw new Error(`Não foi possível ler ${PROJECT_CONFIG_FILE}: ${err.message}`);
|
|
130
|
-
}
|
|
131
|
-
let parsed;
|
|
132
|
-
try {
|
|
133
|
-
parsed = JSON.parse(raw);
|
|
134
|
-
}
|
|
135
|
-
catch (err) {
|
|
136
|
-
throw new Error(`${PROJECT_CONFIG_FILE} contém JSON inválido: ${err.message}`);
|
|
137
|
-
}
|
|
138
|
-
if (!parsed || typeof parsed !== 'object') {
|
|
139
|
-
throw new Error(`${PROJECT_CONFIG_FILE} deve conter um objeto JSON.`);
|
|
140
|
-
}
|
|
141
|
-
return parsed;
|
|
142
|
-
}
|
|
143
|
-
/** Valida e monta o `ProjectConfig` a partir do objeto já parseado do `noclaf.json`. */
|
|
144
|
-
function shapeProjectConfig(obj) {
|
|
145
|
-
const projectId = obj.project_id;
|
|
146
|
-
if (typeof projectId !== 'string' || !UUID_REGEX.test(projectId)) {
|
|
147
|
-
throw new Error(`${PROJECT_CONFIG_FILE}: campo "project_id" ausente ou não é um UUID válido.`);
|
|
148
|
-
}
|
|
149
|
-
const repositoryId = obj.repository_id;
|
|
150
|
-
if (repositoryId !== undefined &&
|
|
151
|
-
repositoryId !== null &&
|
|
152
|
-
(typeof repositoryId !== 'string' || !UUID_REGEX.test(repositoryId))) {
|
|
153
|
-
throw new Error(`${PROJECT_CONFIG_FILE}: campo "repository_id" deve ser UUID, null ou ausente.`);
|
|
154
|
-
}
|
|
155
|
-
const config = { project_id: projectId };
|
|
156
|
-
if (typeof repositoryId === 'string') {
|
|
157
|
-
config.repository_id = repositoryId;
|
|
158
|
-
}
|
|
159
|
-
else if (repositoryId === null) {
|
|
160
|
-
config.repository_id = null;
|
|
161
|
-
}
|
|
162
|
-
const selection = parseSelection(obj.selection) ?? migrateLegacySelection(obj);
|
|
163
|
-
if (selection)
|
|
164
|
-
config.selection = selection;
|
|
165
|
-
if (obj.ide === 'vscode' || obj.ide === 'xcode' || obj.ide === 'other') {
|
|
166
|
-
config.ide = obj.ide;
|
|
167
|
-
}
|
|
168
|
-
return config;
|
|
169
|
-
}
|
|
170
|
-
export function loadProjectConfig(cwd = process.cwd()) {
|
|
171
|
-
// Precedência pro ambiente (Desktop Extension / Cowork não têm noclaf.json no cwd).
|
|
172
|
-
const envConfig = loadProjectConfigFromEnv();
|
|
173
|
-
if (envConfig)
|
|
174
|
-
return envConfig;
|
|
175
|
-
const path = findProjectConfigPath(cwd);
|
|
176
|
-
if (!path)
|
|
177
|
-
return null;
|
|
178
|
-
const config = shapeProjectConfig(readProjectConfigFile(path));
|
|
179
|
-
// Prefs do usuário (`noclaf.user.json`, ao lado do repo file) sobrepõem o `ide`.
|
|
180
|
-
const userIde = readUserConfig(dirname(path)).ide;
|
|
181
|
-
if (userIde)
|
|
182
|
-
config.ide = userIde;
|
|
183
|
-
return config;
|
|
184
|
-
}
|
|
185
|
-
/**
|
|
186
|
-
* Grava o `noclaf.json` **do repo** (versionado): binding + seleção. **Não** grava `ide`
|
|
187
|
-
* (isso é do usuário → `writeUserConfig`).
|
|
188
|
-
*/
|
|
189
|
-
export function writeProjectConfig(config, cwd = process.cwd()) {
|
|
190
|
-
const repo = { project_id: config.project_id };
|
|
191
|
-
if (config.repository_id !== undefined)
|
|
192
|
-
repo.repository_id = config.repository_id;
|
|
193
|
-
if (config.selection)
|
|
194
|
-
repo.selection = config.selection;
|
|
195
|
-
writeFileSync(getProjectConfigPath(cwd), JSON.stringify(repo, null, 2) + "\n", "utf8");
|
|
196
|
-
}
|
|
197
|
-
/** Grava o `noclaf.user.json` (por-máquina, gitignored): ide + prefs pessoais. */
|
|
198
|
-
export function writeUserConfig(user, cwd = process.cwd()) {
|
|
199
|
-
const path = getUserConfigPath(cwd);
|
|
200
|
-
const merged = { ...readUserConfig(dirname(path)), ...user }; // preserva prefs não informadas
|
|
201
|
-
const obj = {};
|
|
202
|
-
if (merged.ide)
|
|
203
|
-
obj.ide = merged.ide;
|
|
204
|
-
if (merged.max_parallelism !== undefined)
|
|
205
|
-
obj.max_parallelism = merged.max_parallelism;
|
|
206
|
-
writeFileSync(path, JSON.stringify(obj, null, 2) + "\n", "utf8");
|
|
207
|
-
}
|
|
208
|
-
/**
|
|
209
|
-
* Migra o formato antigo monolítico: se o `noclaf.json` ainda tem `ide`, move pro
|
|
210
|
-
* `noclaf.user.json` e reescreve o `noclaf.json` sem ele. Idempotente. `true` se migrou.
|
|
211
|
-
*/
|
|
212
|
-
export function migrateConfigSplit(cwd = process.cwd()) {
|
|
213
|
-
const repoPath = getProjectConfigPath(cwd);
|
|
214
|
-
if (!existsSync(repoPath))
|
|
215
|
-
return false;
|
|
216
|
-
let obj;
|
|
217
|
-
try {
|
|
218
|
-
obj = JSON.parse(readFileSync(repoPath, "utf8"));
|
|
219
|
-
}
|
|
220
|
-
catch {
|
|
221
|
-
return false;
|
|
222
|
-
}
|
|
223
|
-
if (!("ide" in obj))
|
|
224
|
-
return false;
|
|
225
|
-
const ide = obj.ide;
|
|
226
|
-
delete obj.ide;
|
|
227
|
-
delete obj.sections; // resquícios do formato ainda mais antigo
|
|
228
|
-
delete obj.rules;
|
|
229
|
-
writeFileSync(repoPath, JSON.stringify(obj, null, 2) + "\n", "utf8");
|
|
230
|
-
if ((ide === "vscode" || ide === "xcode" || ide === "other") && !readUserConfig(cwd).ide) {
|
|
231
|
-
writeUserConfig({ ide }, cwd);
|
|
232
|
-
}
|
|
233
|
-
return true;
|
|
234
|
-
}
|
|
235
|
-
function readGitignore(cwd) {
|
|
236
|
-
const path = join(cwd, ".gitignore");
|
|
237
|
-
return { path, text: existsSync(path) ? readFileSync(path, "utf8") : "" };
|
|
238
|
-
}
|
|
239
|
-
// Sufixos ESTÁVEIS dos marcadores do `.gitignore`. O prefixo é a marca (`# noclaf`),
|
|
240
|
-
// que muda num rebrand — então casamos por sufixo pra reconhecer/limpar o marcador de
|
|
241
|
-
// QUALQUER marca (é a migração que remove o marcador antigo).
|
|
242
|
-
const GITIGNORE_USER_SUFFIX = "(config local do usuário)";
|
|
243
|
-
const GITIGNORE_PROJECT_SUFFIX = "(binding local do projeto)";
|
|
244
|
-
export const GITIGNORE_GENERATED_SUFFIX = "(artefato gerado — regerado pelo sync)";
|
|
245
|
-
/** Linha é um marcador nosso do sufixo dado? Agnóstico à marca. */
|
|
246
|
-
function isGitignoreMarker(line, suffix) {
|
|
247
|
-
const t = line.trim();
|
|
248
|
-
return t.startsWith("#") && t.endsWith(suffix);
|
|
249
|
-
}
|
|
250
|
-
/** Garante uma entrada no `.gitignore` (idempotente). Cria o arquivo se não existir. */
|
|
251
|
-
export function ensureGitignored(entry = USER_CONFIG_FILE, cwd = process.cwd(), suffix = GITIGNORE_USER_SUFFIX) {
|
|
252
|
-
const { path, text } = readGitignore(cwd);
|
|
253
|
-
const marker = `# ${brand.name} ${suffix}`;
|
|
254
|
-
// Migração: varre marcadores do mesmo sufixo de outra marca (preserva o atual).
|
|
255
|
-
const kept = text
|
|
256
|
-
.split(/\r?\n/)
|
|
257
|
-
.filter((l) => l.trim() === marker || !isGitignoreMarker(l, suffix));
|
|
258
|
-
const base = kept.join("\n");
|
|
259
|
-
if (kept.some((l) => l.trim() === entry)) {
|
|
260
|
-
if (base !== text)
|
|
261
|
-
writeFileSync(path, base, "utf8"); // persiste a limpeza
|
|
262
|
-
return "present";
|
|
263
|
-
}
|
|
264
|
-
const sep = base.length > 0 && !base.endsWith("\n") ? "\n" : "";
|
|
265
|
-
const block = `${sep}${base.length > 0 ? "\n" : ""}${marker}\n${entry}\n`;
|
|
266
|
-
writeFileSync(path, base + block, "utf8");
|
|
267
|
-
return "added";
|
|
268
|
-
}
|
|
269
|
-
/** Remove uma entrada exata do `.gitignore` (+ o marcador de projeto órfão, de qualquer marca). `true` se removeu. */
|
|
270
|
-
export function removeFromGitignore(entry, cwd = process.cwd()) {
|
|
271
|
-
const { path, text } = readGitignore(cwd);
|
|
272
|
-
if (!text)
|
|
273
|
-
return false;
|
|
274
|
-
const lines = text.split(/\r?\n/);
|
|
275
|
-
const kept = lines.filter((l) => l.trim() !== entry && !isGitignoreMarker(l, GITIGNORE_PROJECT_SUFFIX));
|
|
276
|
-
if (kept.length === lines.length)
|
|
277
|
-
return false;
|
|
278
|
-
writeFileSync(path, kept.join("\n"), "utf8");
|
|
279
|
-
return true;
|
|
280
|
-
}
|
|
281
|
-
/**
|
|
282
|
-
* Ajusta o `.gitignore` pro split: tira o `noclaf.json` (agora versionado, do time) e
|
|
283
|
-
* garante o `noclaf.user.json` (do usuário) ignorado. Retorna se acrescentou o user file.
|
|
284
|
-
*/
|
|
285
|
-
export function fixGitignoreForSplit(cwd = process.cwd()) {
|
|
286
|
-
removeFromGitignore(PROJECT_CONFIG_FILE, cwd);
|
|
287
|
-
return ensureGitignored(USER_CONFIG_FILE, cwd);
|
|
288
|
-
}
|
|
289
|
-
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/constants.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { brand, homePath, patRegex } from './brand.js';
|
|
2
|
-
export const SUPABASE_URL = brand.supabaseUrl;
|
|
3
|
-
export const SUPABASE_ANON_KEY = brand.supabaseAnonKey;
|
|
4
|
-
export const TOKEN_EXCHANGE_URL = `${SUPABASE_URL}/functions/v1/mcp-token-exchange`;
|
|
5
|
-
export const CREDENTIALS_DIR = homePath();
|
|
6
|
-
export const CREDENTIALS_FILE = homePath('credentials.json');
|
|
7
|
-
export const PROJECT_CONFIG_FILE = brand.projectConfigFile;
|
|
8
|
-
export const PAT_REGEX = patRegex;
|
|
9
|
-
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEvD,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,CAAC;AAC9C,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC,eAAe,CAAC;AAEvD,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,YAAY,kCAAkC,CAAC;AAEpF,MAAM,CAAC,MAAM,eAAe,GAAG,QAAQ,EAAE,CAAC;AAC1C,MAAM,CAAC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC;AAE7D,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAC,iBAAiB,CAAC;AAE3D,MAAM,CAAC,MAAM,SAAS,GAAG,QAAQ,CAAC"}
|
package/dist/core/ports.js
DELETED
package/dist/core/ports.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ports.js","sourceRoot":"","sources":["../../src/core/ports.ts"],"names":[],"mappings":""}
|
package/dist/core/types.js
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/** Status que contam como entregue: ficam na sprint/release ao encerrar e não vencem. */
|
|
2
|
-
export const FINISHED_STATUSES = ['done', 'production'];
|
|
3
|
-
/** Filtro PostgREST `not.in` correspondente a FINISHED_STATUSES. */
|
|
4
|
-
export const FINISHED_FILTER = `(${FINISHED_STATUSES.map((s) => `"${s}"`).join(',')})`;
|
|
5
|
-
//# sourceMappingURL=types.js.map
|
package/dist/core/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAgMA,yFAAyF;AACzF,MAAM,CAAC,MAAM,iBAAiB,GAAsB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAE3E,oEAAoE;AACpE,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC"}
|
package/dist/database.types.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tipos minimalistas das tabelas do NOS usadas pelo MCP.
|
|
3
|
-
*
|
|
4
|
-
* Não gerado automaticamente — `supabase gen types` exige credentials no projeto.
|
|
5
|
-
* Quando tiver acesso, substitua este arquivo por `npm run gen:types`.
|
|
6
|
-
*
|
|
7
|
-
* Cobre apenas as colunas que o MCP server lê hoje. Adicione campos
|
|
8
|
-
* conforme novas tools precisarem.
|
|
9
|
-
*/
|
|
10
|
-
export {};
|
|
11
|
-
//# sourceMappingURL=database.types.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"database.types.js","sourceRoot":"","sources":["../src/database.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { UUID_REGEX } from '../config.js';
|
|
2
|
-
/**
|
|
3
|
-
* Projeto ativo da sessão, mantido **só em memória** pelo tempo de vida do
|
|
4
|
-
* processo do MCP server. Não persiste em disco: ao reiniciar o servidor o
|
|
5
|
-
* projeto volta ao default (noclaf.json/env), e nada vaza entre máquinas ou
|
|
6
|
-
* outros clientes.
|
|
7
|
-
*
|
|
8
|
-
* Caveat: no Claude Desktop/Cowork um único processo do servidor pode ser
|
|
9
|
-
* compartilhado entre conversas, então o ativo é por processo, não estritamente
|
|
10
|
-
* por conversa. O argumento `project_id` por chamada continua sendo o override
|
|
11
|
-
* por-conversa (ver `resolveProjectConfig`).
|
|
12
|
-
*/
|
|
13
|
-
let activeProjectId = null;
|
|
14
|
-
/** Projeto ativo da sessão, ou null se nenhum/UUID inválido. */
|
|
15
|
-
export function loadActiveProjectId() {
|
|
16
|
-
return activeProjectId !== null && UUID_REGEX.test(activeProjectId)
|
|
17
|
-
? activeProjectId
|
|
18
|
-
: null;
|
|
19
|
-
}
|
|
20
|
-
/** Define o projeto ativo da sessão (em memória). */
|
|
21
|
-
export function setActiveProjectId(projectId) {
|
|
22
|
-
activeProjectId = projectId;
|
|
23
|
-
}
|
|
24
|
-
/** Limpa o projeto ativo da sessão. */
|
|
25
|
-
export function clearActiveProjectId() {
|
|
26
|
-
activeProjectId = null;
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=active-project.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"active-project.js","sourceRoot":"","sources":["../../src/lib/active-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C;;;;;;;;;;GAUG;AACH,IAAI,eAAe,GAAkB,IAAI,CAAC;AAE1C,gEAAgE;AAChE,MAAM,UAAU,mBAAmB;IACjC,OAAO,eAAe,KAAK,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC;QACjE,CAAC,CAAC,eAAe;QACjB,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAClD,eAAe,GAAG,SAAS,CAAC;AAC9B,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,oBAAoB;IAClC,eAAe,GAAG,IAAI,CAAC;AACzB,CAAC"}
|
package/dist/lib/autopull.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { claudeTarget, codexTarget } from './targets.js';
|
|
2
|
-
/** Decide se o auto-pull deve rodar. Pura: Cowork recebe skills via
|
|
3
|
-
* resources/prompts (não arquivo nativo) e o usuário pode desligar explicitamente. */
|
|
4
|
-
export function shouldRunAutoPull(client, autoPullFlag) {
|
|
5
|
-
const isCowork = client === 'cowork';
|
|
6
|
-
return !isCowork && autoPullFlag !== '0' && autoPullFlag !== 'false';
|
|
7
|
-
}
|
|
8
|
-
/** Cliente nativo do worker: Codex escreve `~/.codex` (skills traduzidas),
|
|
9
|
-
* qualquer outro cai pro Claude Code (`~/.claude`). */
|
|
10
|
-
export function pickProvisionTarget(client) {
|
|
11
|
-
return client === 'codex' ? codexTarget : claudeTarget;
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=autopull.js.map
|
package/dist/lib/autopull.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"autopull.js","sourceRoot":"","sources":["../../src/lib/autopull.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAwB,MAAM,cAAc,CAAC;AAE/E;sFACsF;AACtF,MAAM,UAAU,iBAAiB,CAAC,MAA0B,EAAE,YAAgC;IAC5F,MAAM,QAAQ,GAAG,MAAM,KAAK,QAAQ,CAAC;IACrC,OAAO,CAAC,QAAQ,IAAI,YAAY,KAAK,GAAG,IAAI,YAAY,KAAK,OAAO,CAAC;AACvE,CAAC;AAED;uDACuD;AACvD,MAAM,UAAU,mBAAmB,CAAC,MAA0B;IAC5D,OAAO,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC;AACzD,CAAC"}
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { spawnSync } from 'node:child_process';
|
|
2
|
-
import { readdirSync, rmSync } from 'node:fs';
|
|
3
|
-
import { join } from 'node:path';
|
|
4
|
-
/**
|
|
5
|
-
* Clona a boilerplate do catálogo pro dest e desliga o histórico dela (o dest vira
|
|
6
|
-
* um repo novo, sem remotos). Roda antes do harness/skills — eles escrevem por cima.
|
|
7
|
-
* `spawnSync` com array de args (nunca shell) — `repo`/`ref` já vêm do catálogo, mas
|
|
8
|
-
* ainda assim recusamos algo que comece com `-` (não vira flag do git).
|
|
9
|
-
*/
|
|
10
|
-
const FLAG_LIKE = /^-/;
|
|
11
|
-
const ALLOWED_REPO_SCHEMES = [/^https:\/\//, /^git@/];
|
|
12
|
-
/** Repo/ref começando com `-` viraria flag do git em vez de argumento posicional. */
|
|
13
|
-
export function isSafeGitArg(value) {
|
|
14
|
-
return !FLAG_LIKE.test(value);
|
|
15
|
-
}
|
|
16
|
-
/** Só `https://` ou `git@` — o resto (`ext::`, `file://`, ...) vira comando arbitrário pro git. */
|
|
17
|
-
export function isAllowedRepoUrl(repo) {
|
|
18
|
-
return ALLOWED_REPO_SCHEMES.some((scheme) => scheme.test(repo));
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Pura: dado o `readdir` do dest, decide se ele serve pro scaffold. `git clone` recusa
|
|
22
|
-
* qualquer dest não-vazio — inclusive `.DS_Store` — então qualquer entrada já desqualifica.
|
|
23
|
-
*/
|
|
24
|
-
export function isEmptyForScaffold(entries) {
|
|
25
|
-
return entries.length === 0;
|
|
26
|
-
}
|
|
27
|
-
/** Lê o dest do disco e aplica `isEmptyForScaffold`. Wrapper fino — a decisão é pura. */
|
|
28
|
-
export function destIsEmptyForScaffold(dest) {
|
|
29
|
-
return isEmptyForScaffold(readdirSync(dest));
|
|
30
|
-
}
|
|
31
|
-
/** Args do `git clone` pro repo/ref/dest do catálogo. Pura — sem `ref`, sem `--branch`. */
|
|
32
|
-
export function buildCloneArgs(repo, ref, dest) {
|
|
33
|
-
const args = ['clone', '--depth', '1'];
|
|
34
|
-
if (ref)
|
|
35
|
-
args.push('--branch', ref);
|
|
36
|
-
args.push(repo, dest);
|
|
37
|
-
return args;
|
|
38
|
-
}
|
|
39
|
-
function runGit(args, cwd) {
|
|
40
|
-
const result = spawnSync('git', args, {
|
|
41
|
-
cwd,
|
|
42
|
-
encoding: 'utf8',
|
|
43
|
-
env: { ...process.env, GIT_TERMINAL_PROMPT: '0' },
|
|
44
|
-
});
|
|
45
|
-
if (result.status !== 0) {
|
|
46
|
-
const detail = (result.stderr || result.error?.message || '').trim();
|
|
47
|
-
throw new Error(`git ${args[0]} falhou${detail ? `: ${detail}` : ''}`);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
/** `git clone --depth 1 [--branch <ref>] <repo> <dest>`. */
|
|
51
|
-
export function cloneBoilerplate(repo, ref, dest) {
|
|
52
|
-
if (!isSafeGitArg(repo) || (ref !== null && !isSafeGitArg(ref))) {
|
|
53
|
-
throw new Error(`boilerplate: repo/ref inválido — "${repo}"${ref ? ` @ ${ref}` : ''}`);
|
|
54
|
-
}
|
|
55
|
-
if (!isAllowedRepoUrl(repo)) {
|
|
56
|
-
throw new Error(`boilerplate: repo precisa ser https:// ou git@ — "${repo}"`);
|
|
57
|
-
}
|
|
58
|
-
runGit(buildCloneArgs(repo, ref, dest));
|
|
59
|
-
}
|
|
60
|
-
/** Remove o `.git` clonado e reinicia — o dest vira um repo próprio, sem o histórico do template. */
|
|
61
|
-
export function detachGit(dest) {
|
|
62
|
-
rmSync(join(dest, '.git'), { recursive: true, force: true });
|
|
63
|
-
runGit(['init'], dest);
|
|
64
|
-
}
|
|
65
|
-
//# sourceMappingURL=boilerplate-scaffold.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"boilerplate-scaffold.js","sourceRoot":"","sources":["../../src/lib/boilerplate-scaffold.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/boilerplates.js
DELETED
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { existsSync, readFileSync, readdirSync } from 'node:fs';
|
|
2
|
-
import { join, relative, sep } from 'node:path';
|
|
3
|
-
import { skillsCacheDir } from './skills-cache.js';
|
|
4
|
-
import { parseFrontmatter } from './skills.js';
|
|
5
|
-
import { GENERAL } from './sections.js';
|
|
6
|
-
const MANIFEST_NAME = 'boilerplate.md';
|
|
7
|
-
function listManifests(dir) {
|
|
8
|
-
const out = [];
|
|
9
|
-
const walk = (abs) => {
|
|
10
|
-
for (const entry of readdirSync(abs, { withFileTypes: true })) {
|
|
11
|
-
if (entry.name.startsWith('.'))
|
|
12
|
-
continue;
|
|
13
|
-
const childAbs = join(abs, entry.name);
|
|
14
|
-
if (entry.isDirectory())
|
|
15
|
-
walk(childAbs);
|
|
16
|
-
else if (entry.isFile() && entry.name.toLowerCase() === MANIFEST_NAME)
|
|
17
|
-
out.push(relative(dir, childAbs).split(sep).join('/'));
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
walk(dir);
|
|
21
|
-
return out;
|
|
22
|
-
}
|
|
23
|
-
/** Lê os manifestos crus (`BOILERPLATE.md`) do topo `boilerplates/` do cache. */
|
|
24
|
-
export function readBoilerplateFiles(dir = skillsCacheDir()) {
|
|
25
|
-
const boilerplatesDir = join(dir, 'boilerplates');
|
|
26
|
-
if (!existsSync(boilerplatesDir))
|
|
27
|
-
return [];
|
|
28
|
-
return listManifests(boilerplatesDir).map((rel) => ({
|
|
29
|
-
path: `boilerplates/${rel}`,
|
|
30
|
-
raw: readFileSync(join(boilerplatesDir, rel), 'utf-8'),
|
|
31
|
-
}));
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Taxonomia por caminho: `boilerplates/<role>/<área|general>/<stack|general>/<nome>/BOILERPLATE.md`.
|
|
35
|
-
* `general` em área/stack vira `null` — mesma regra de `toCatalogSkill`. Montagem pura.
|
|
36
|
-
*/
|
|
37
|
-
export function toCatalogBoilerplate(doc) {
|
|
38
|
-
const parts = doc.path.split('/');
|
|
39
|
-
const role = parts[1] ?? '';
|
|
40
|
-
const area = parts[2] ?? GENERAL;
|
|
41
|
-
const stackSegment = area === GENERAL ? GENERAL : (parts[3] ?? GENERAL);
|
|
42
|
-
const id = parts[parts.length - 2] ?? '';
|
|
43
|
-
const { frontmatter } = parseFrontmatter(doc.raw);
|
|
44
|
-
return {
|
|
45
|
-
id,
|
|
46
|
-
title: frontmatter.title ?? '',
|
|
47
|
-
description: frontmatter.description ?? '',
|
|
48
|
-
role,
|
|
49
|
-
area: area === GENERAL ? null : area,
|
|
50
|
-
stack: stackSegment === GENERAL ? null : stackSegment,
|
|
51
|
-
repo: frontmatter.repo ?? '',
|
|
52
|
-
ref: frontmatter.ref ? String(frontmatter.ref).trim() : null,
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
/** Descobre os boilerplates no cache do repo de skills. Sem cache/topo → `[]`. */
|
|
56
|
-
export function discoverBoilerplates(dir = skillsCacheDir()) {
|
|
57
|
-
return readBoilerplateFiles(dir)
|
|
58
|
-
.map(toCatalogBoilerplate)
|
|
59
|
-
.sort((a, b) => a.id.localeCompare(b.id));
|
|
60
|
-
}
|
|
61
|
-
//# sourceMappingURL=boilerplates.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"boilerplates.js","sourceRoot":"","sources":["../../src/lib/boilerplates.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { FINISHED_STATUSES } from '../core/types.js';
|
|
2
|
-
const pad = (n) => String(n).padStart(2, '0');
|
|
3
|
-
const iso = (d) => `${d.getUTCFullYear()}-${pad(d.getUTCMonth() + 1)}-${pad(d.getUTCDate())}`;
|
|
4
|
-
/** Datas YYYY-MM-DD de `from` a `to`, inclusive. */
|
|
5
|
-
export function eachDay(from, to) {
|
|
6
|
-
const out = [];
|
|
7
|
-
for (let d = new Date(`${from}T00:00:00Z`); iso(d) <= to; d.setUTCDate(d.getUTCDate() + 1))
|
|
8
|
-
out.push(iso(d));
|
|
9
|
-
return out;
|
|
10
|
-
}
|
|
11
|
-
const isLeap = (y) => (y % 4 === 0 && y % 100 !== 0) || y % 400 === 0;
|
|
12
|
-
/** Ocorrência anual (mês/dia de `origin`) em `date`; 29/02 cai em 28/02 em ano não bissexto. Devolve anos desde a origem. */
|
|
13
|
-
export function yearsOn(origin, date) {
|
|
14
|
-
if (!origin)
|
|
15
|
-
return null;
|
|
16
|
-
const [oy, om, od] = origin.split('-').map(Number);
|
|
17
|
-
const [y, m, d] = date.split('-').map(Number);
|
|
18
|
-
const day = om === 2 && od === 29 && !isLeap(y) ? 28 : od;
|
|
19
|
-
return om === m && day === d ? y - oy : null;
|
|
20
|
-
}
|
|
21
|
-
/** Monta os dias com eventos (só dias não vazios), agrupados por data. */
|
|
22
|
-
export function buildCalendar(from, to, s) {
|
|
23
|
-
const byDay = new Map();
|
|
24
|
-
const add = (date, ev) => {
|
|
25
|
-
if (date < from || date > to)
|
|
26
|
-
return;
|
|
27
|
-
const list = byDay.get(date);
|
|
28
|
-
if (list)
|
|
29
|
-
list.push(ev);
|
|
30
|
-
else
|
|
31
|
-
byDay.set(date, [ev]);
|
|
32
|
-
};
|
|
33
|
-
for (const h of s.holidays)
|
|
34
|
-
add(h.date, { kind: 'holiday', id: h.id, name: h.name, type: h.type, scope: h.scope });
|
|
35
|
-
for (const t of s.deadlines) {
|
|
36
|
-
if (FINISHED_STATUSES.includes(t.status))
|
|
37
|
-
continue;
|
|
38
|
-
add(t.end_date, { kind: 'deadline', key: t.key, title: t.title, status: t.status, project: t.project });
|
|
39
|
-
}
|
|
40
|
-
for (const v of s.vacations) {
|
|
41
|
-
for (const d of eachDay(v.start_date, v.end_date))
|
|
42
|
-
add(d, { kind: 'vacation', id: v.id, person: v.person, notes: v.notes });
|
|
43
|
-
}
|
|
44
|
-
for (const h of s.homeOffice)
|
|
45
|
-
add(h.date, { kind: 'home_office', person: h.person });
|
|
46
|
-
for (const r of s.releases)
|
|
47
|
-
add(r.target_date, { kind: 'release', name: r.name, status: r.status });
|
|
48
|
-
for (const d of eachDay(from, to)) {
|
|
49
|
-
for (const p of s.people) {
|
|
50
|
-
if (yearsOn(p.birth_date, d) !== null)
|
|
51
|
-
add(d, { kind: 'birthday', person: p.name });
|
|
52
|
-
const y = yearsOn(p.company_anniversary_date, d);
|
|
53
|
-
if (y !== null && y > 0)
|
|
54
|
-
add(d, { kind: 'work_anniversary', person: p.name, years: y });
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
return [...byDay.entries()].sort(([a], [b]) => a.localeCompare(b)).map(([date, events]) => ({ date, events }));
|
|
58
|
-
}
|
|
59
|
-
//# sourceMappingURL=calendar-logic.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"calendar-logic.js","sourceRoot":"","sources":["../../src/lib/calendar-logic.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
/** Regras puras da escrita no calendário. */
|
|
2
|
-
/** DELETE negado por RLS afeta 0 linhas sem erro: 0 vira mensagem amigável; null se ok. */
|
|
3
|
-
export function deleteFailure(rows, what) {
|
|
4
|
-
return rows && rows.length > 0 ? null : `${what} não encontrado ou sem permissão.`;
|
|
5
|
-
}
|
|
6
|
-
//# sourceMappingURL=calendar-write-logic.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"calendar-write-logic.js","sourceRoot":"","sources":["../../src/lib/calendar-write-logic.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAE7C,2FAA2F;AAC3F,MAAM,UAAU,aAAa,CAAC,IAAsB,EAAE,IAAY;IAChE,OAAO,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,mCAAmC,CAAC;AACrF,CAAC"}
|