@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/lib/skills.js
DELETED
|
@@ -1,237 +0,0 @@
|
|
|
1
|
-
import { existsSync, readFileSync, readdirSync } from 'node:fs';
|
|
2
|
-
import { createRequire } from 'node:module';
|
|
3
|
-
import { join, relative, sep, dirname } from 'node:path';
|
|
4
|
-
import { skillsCacheDir, skillsCached } from './skills-cache.js';
|
|
5
|
-
import { includePath } from './sections.js';
|
|
6
|
-
import { brand, env } from '../brand.js';
|
|
7
|
-
/**
|
|
8
|
-
* Diretório do conteúdo das skills. Resolve em ordem: `NOCLAF_SKILLS_DIR`
|
|
9
|
-
* (checkout local), `@noclaf/skills` via require.resolve (dev legado), ou o
|
|
10
|
-
* cache `~/.noclaf/skills` populado por `noclaf sync`/`init` (fluxo padrão).
|
|
11
|
-
*/
|
|
12
|
-
export function skillsDir() {
|
|
13
|
-
const override = env('SKILLS_DIR');
|
|
14
|
-
if (override && existsSync(override))
|
|
15
|
-
return override;
|
|
16
|
-
try {
|
|
17
|
-
const require = createRequire(import.meta.url);
|
|
18
|
-
return dirname(require.resolve(`${brand.skillsPackage}/package.json`));
|
|
19
|
-
}
|
|
20
|
-
catch {
|
|
21
|
-
/* pacote ausente (modelo repo-aberto) → cai pro cache local */
|
|
22
|
-
}
|
|
23
|
-
if (skillsCached())
|
|
24
|
-
return skillsCacheDir();
|
|
25
|
-
throw new Error(`Conteúdo de skills não encontrado. Rode \`${brand.name} sync\` pra baixar o repo ` +
|
|
26
|
-
'(ou defina NOCLAF_SKILLS_DIR apontando pra um checkout local).');
|
|
27
|
-
}
|
|
28
|
-
function listMarkdown(dir) {
|
|
29
|
-
const out = [];
|
|
30
|
-
const walk = (abs) => {
|
|
31
|
-
for (const entry of readdirSync(abs, { withFileTypes: true })) {
|
|
32
|
-
if (entry.name.startsWith('.'))
|
|
33
|
-
continue;
|
|
34
|
-
const childAbs = join(abs, entry.name);
|
|
35
|
-
if (entry.isDirectory())
|
|
36
|
-
walk(childAbs);
|
|
37
|
-
else if (entry.isFile() &&
|
|
38
|
-
entry.name.toLowerCase().endsWith('.md') &&
|
|
39
|
-
entry.name.toLowerCase() !== 'readme.md')
|
|
40
|
-
out.push(relative(dir, childAbs).split(sep).join('/'));
|
|
41
|
-
}
|
|
42
|
-
};
|
|
43
|
-
walk(dir);
|
|
44
|
-
return out;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Coleta as linhas indentadas/vazias seguintes (bloco YAML folded `>` ou literal `|`)
|
|
48
|
-
* a partir de `lines[i + 1]`. Retorna o valor já juntado e o novo índice do cursor
|
|
49
|
-
* (última linha consumida) pro chamador continuar o loop dali.
|
|
50
|
-
*/
|
|
51
|
-
function collectBlockValue(lines, i, folded) {
|
|
52
|
-
const collected = [];
|
|
53
|
-
while (i + 1 < lines.length && (lines[i + 1].trim() === '' || /^\s+\S/.test(lines[i + 1]))) {
|
|
54
|
-
collected.push(lines[++i].trim());
|
|
55
|
-
}
|
|
56
|
-
const value = folded
|
|
57
|
-
? collected.join(' ').replace(/\s+/g, ' ').trim()
|
|
58
|
-
: collected.join('\n').trim();
|
|
59
|
-
return { value, nextIndex: i };
|
|
60
|
-
}
|
|
61
|
-
/** Valor entre aspas simples/duplas → sem as aspas. Sem aspas → devolve como veio. */
|
|
62
|
-
function unquote(value) {
|
|
63
|
-
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
64
|
-
(value.startsWith("'") && value.endsWith("'"))) {
|
|
65
|
-
return value.slice(1, -1);
|
|
66
|
-
}
|
|
67
|
-
return value;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Parser de frontmatter minimalista: `key: value` de uma linha, mais blocos
|
|
71
|
-
* folded (`>`) e literal (`|`). Suficiente pros metadados (não é YAML completo).
|
|
72
|
-
* Exportado pra reuso por outros manifestos (ex.: `BOILERPLATE.md`).
|
|
73
|
-
*/
|
|
74
|
-
export function parseFrontmatter(raw) {
|
|
75
|
-
const fm = {};
|
|
76
|
-
const match = /^---\r?\n([\s\S]*?)\r?\n---\r?\n?/.exec(raw);
|
|
77
|
-
if (!match)
|
|
78
|
-
return { frontmatter: fm, body: raw };
|
|
79
|
-
const lines = match[1].split(/\r?\n/);
|
|
80
|
-
for (let i = 0; i < lines.length; i++) {
|
|
81
|
-
const m = /^([A-Za-z0-9_-]+):\s*(.*)$/.exec(lines[i]);
|
|
82
|
-
if (!m)
|
|
83
|
-
continue;
|
|
84
|
-
const key = m[1];
|
|
85
|
-
const value = m[2].trim();
|
|
86
|
-
if (/^[|>][+-]?$/.test(value)) {
|
|
87
|
-
const block = collectBlockValue(lines, i, value[0] === '>');
|
|
88
|
-
fm[key] = block.value;
|
|
89
|
-
i = block.nextIndex;
|
|
90
|
-
continue;
|
|
91
|
-
}
|
|
92
|
-
fm[key] = unquote(value);
|
|
93
|
-
}
|
|
94
|
-
return { frontmatter: fm, body: raw.slice(match[0].length) };
|
|
95
|
-
}
|
|
96
|
-
/** Clientes de IA reconhecidos pra visibilidade de docs. */
|
|
97
|
-
export const KNOWN_CLIENTS = ['claude-code', 'codex', 'cowork'];
|
|
98
|
-
const KNOWN_CLIENTS_SET = new Set(KNOWN_CLIENTS);
|
|
99
|
-
/**
|
|
100
|
-
* Parseia o campo `clients:` do frontmatter (lista separada por vírgula/espaço)
|
|
101
|
-
* num conjunto normalizado. Vazio/ausente/sem valor válido → `null` (= todos).
|
|
102
|
-
*/
|
|
103
|
-
export function parseClients(value) {
|
|
104
|
-
if (!value)
|
|
105
|
-
return null;
|
|
106
|
-
const list = value
|
|
107
|
-
.split(/[,\s]+/)
|
|
108
|
-
.map((s) => s.trim().toLowerCase())
|
|
109
|
-
.filter((s) => KNOWN_CLIENTS_SET.has(s));
|
|
110
|
-
return list.length > 0 ? [...new Set(list)] : null;
|
|
111
|
-
}
|
|
112
|
-
/** Um doc é visível pra um surface se não restringe clientes ou inclui aquele. */
|
|
113
|
-
export function docForSurface(doc, surface) {
|
|
114
|
-
if (!surface)
|
|
115
|
-
return true;
|
|
116
|
-
return !doc.clients || doc.clients.includes(surface);
|
|
117
|
-
}
|
|
118
|
-
/** Recorta a lista de docs pros visíveis num surface. */
|
|
119
|
-
export function filterSkillsForSurface(docs, surface) {
|
|
120
|
-
if (!surface)
|
|
121
|
-
return docs;
|
|
122
|
-
return docs.filter((d) => docForSurface(d, surface));
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Filtra docs crus (relPath+conteúdo) pros visíveis num surface. Docs sem
|
|
126
|
-
* frontmatter de doc (ex.: scripts soltos) são mantidos por padrão.
|
|
127
|
-
*/
|
|
128
|
-
export function filterDocsForSurface(docs, surface) {
|
|
129
|
-
if (!surface)
|
|
130
|
-
return docs;
|
|
131
|
-
const parsed = toSkillDocs(docs.map((d) => ({ path: d.relPath, raw: d.content.toString('utf8') })));
|
|
132
|
-
const hidden = new Set(parsed.filter((n) => !docForSurface(n, surface)).map((n) => n.path));
|
|
133
|
-
return docs.filter((d) => !hidden.has(d.relPath));
|
|
134
|
-
}
|
|
135
|
-
function typeForPath(relPath) {
|
|
136
|
-
const parts = relPath.split('/');
|
|
137
|
-
const top = parts[0];
|
|
138
|
-
const base = parts[parts.length - 1].toLowerCase();
|
|
139
|
-
if (top === 'commands')
|
|
140
|
-
return 'command';
|
|
141
|
-
// Só `SKILL.md` é a skill; arquivos de apoio (STANDARDS.md, etc.) são `doc`.
|
|
142
|
-
if (top === 'skills')
|
|
143
|
-
return base === 'skill.md' ? 'skill' : 'doc';
|
|
144
|
-
if (top === 'agents')
|
|
145
|
-
return 'agent';
|
|
146
|
-
if (top === 'dependencies')
|
|
147
|
-
return 'dependency';
|
|
148
|
-
return 'doc';
|
|
149
|
-
}
|
|
150
|
-
/** Id de invocação: skill = nome da pasta (SKILL.md); o resto = basename sem `.md`. */
|
|
151
|
-
function idForPath(relPath) {
|
|
152
|
-
const parts = relPath.split('/');
|
|
153
|
-
const base = parts[parts.length - 1];
|
|
154
|
-
if (base.toLowerCase() === 'skill.md' && parts.length >= 2)
|
|
155
|
-
return parts[parts.length - 2];
|
|
156
|
-
return base.replace(/\.md$/i, '');
|
|
157
|
-
}
|
|
158
|
-
function humanize(id) {
|
|
159
|
-
return id.replace(/[-_]/g, ' ').replace(/\b\w/g, (c) => c.toUpperCase());
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* "Kinds" do pacote que viram docs. `rules/`, `hooks/`, `index.md`, `README.md`,
|
|
163
|
-
* `scripts/` etc. são deliberadamente ignorados — o CLI não lida com eles aqui.
|
|
164
|
-
*/
|
|
165
|
-
const SKILL_KINDS = ['commands', 'skills', 'agents', 'dependencies'];
|
|
166
|
-
/** Lê os `.md` dos kinds do pacote (`@noclaf/skills`) como RawDoc[]. */
|
|
167
|
-
export function readSkillFiles(dir = skillsDir()) {
|
|
168
|
-
if (!existsSync(dir)) {
|
|
169
|
-
throw new Error(`Pacote de skills não encontrado em ${dir}. Instale/publique ${brand.skillsPackage}.`);
|
|
170
|
-
}
|
|
171
|
-
const docs = [];
|
|
172
|
-
for (const kind of SKILL_KINDS) {
|
|
173
|
-
const kindDir = join(dir, kind);
|
|
174
|
-
if (!existsSync(kindDir))
|
|
175
|
-
continue;
|
|
176
|
-
for (const rel of listMarkdown(kindDir)) {
|
|
177
|
-
docs.push({ path: `${kind}/${rel}`, raw: readFileSync(join(kindDir, rel), 'utf-8') });
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
return docs;
|
|
181
|
-
}
|
|
182
|
-
/** Constrói os docs a partir de arquivos crus (frontmatter + corpo). */
|
|
183
|
-
export function toSkillDocs(files) {
|
|
184
|
-
return files
|
|
185
|
-
.map(({ path: relPath, raw }) => {
|
|
186
|
-
const { frontmatter, body } = parseFrontmatter(raw);
|
|
187
|
-
const id = idForPath(relPath);
|
|
188
|
-
return {
|
|
189
|
-
id,
|
|
190
|
-
uid: frontmatter.id ? String(frontmatter.id).trim() : null,
|
|
191
|
-
title: frontmatter.title || frontmatter.name || humanize(id),
|
|
192
|
-
type: typeForPath(relPath),
|
|
193
|
-
path: relPath,
|
|
194
|
-
description: frontmatter.description ?? '',
|
|
195
|
-
frontmatter,
|
|
196
|
-
content: body.trim(),
|
|
197
|
-
clients: parseClients(frontmatter.clients),
|
|
198
|
-
};
|
|
199
|
-
})
|
|
200
|
-
.sort((a, b) => a.path.localeCompare(b.path));
|
|
201
|
-
}
|
|
202
|
-
export function readSkillDocs(dir = skillsDir()) {
|
|
203
|
-
return toSkillDocs(readSkillFiles(dir));
|
|
204
|
-
}
|
|
205
|
-
/**
|
|
206
|
-
* Docs `dependency` do pacote — libs externas que a CLI oferece instalar no fim do
|
|
207
|
-
* `sync`/`init`. Escopadas pela **seleção** (role/área/stack, `general` em cascata):
|
|
208
|
-
* `dev/general` sempre, mais as da área/stack escolhidos. Sem seleção → todas.
|
|
209
|
-
* Best-effort: `[]` se o pacote não estiver disponível.
|
|
210
|
-
*/
|
|
211
|
-
export function readDependencies(selection, dir = skillsDir()) {
|
|
212
|
-
try {
|
|
213
|
-
let deps = readSkillDocs(dir).filter((d) => d.type === 'dependency');
|
|
214
|
-
if (selection)
|
|
215
|
-
deps = deps.filter((d) => includePath(d.path, selection));
|
|
216
|
-
return deps.sort((a, b) => a.title.localeCompare(b.title));
|
|
217
|
-
}
|
|
218
|
-
catch {
|
|
219
|
-
return [];
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
/**
|
|
223
|
-
* Mapa `nome de invocação → id sequencial (frontmatter)`, pra telemetria estável.
|
|
224
|
-
* Best-effort: mapa vazio se o `@noclaf/skills` não estiver disponível.
|
|
225
|
-
*/
|
|
226
|
-
export function skillIdMap(dir = skillsDir()) {
|
|
227
|
-
const map = new Map();
|
|
228
|
-
try {
|
|
229
|
-
for (const d of readSkillDocs(dir))
|
|
230
|
-
map.set(d.id, d.uid);
|
|
231
|
-
}
|
|
232
|
-
catch {
|
|
233
|
-
/* @noclaf/skills ausente → telemetria sem ids */
|
|
234
|
-
}
|
|
235
|
-
return map;
|
|
236
|
-
}
|
|
237
|
-
//# sourceMappingURL=skills.js.map
|
package/dist/lib/skills.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/lib/skills.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Prazo de tarefa que entra em sprint.
|
|
3
|
-
*
|
|
4
|
-
* O banco do NOS tem a invariante `sprint_id NOT NULL ⇒ end_date NOT NULL`
|
|
5
|
-
* (CHECK `tasks_sprint_requires_end_date`, spec 0021 do NOS): tarefa em sprint é
|
|
6
|
-
* compromisso, e compromisso tem prazo. Backlog segue livre de prazo.
|
|
7
|
-
*
|
|
8
|
-
* Os outros caminhos de escrita do produto (`create_client_task`,
|
|
9
|
-
* `move_task_to_project`) já aplicam hoje + 5 dias quando ninguém informou data
|
|
10
|
-
* — "tarefa que não nasce é pior que tarefa sem prazo". Aqui é o mesmo default,
|
|
11
|
-
* pro agente não morrer na constraint.
|
|
12
|
-
*/
|
|
13
|
-
/** Dias de prazo aplicados quando a tarefa entra em sprint sem `end_date`. */
|
|
14
|
-
export const SPRINT_DEADLINE_FALLBACK_DAYS = 5;
|
|
15
|
-
/**
|
|
16
|
-
* `end_date` final de uma tarefa: o informado, ou — só quando ela fica em sprint
|
|
17
|
-
* sem data — hoje + `SPRINT_DEADLINE_FALLBACK_DAYS` em `YYYY-MM-DD`. Pura
|
|
18
|
-
* (`today` injetável); a data é lida no fuso local, como o usuário enxerga "hoje".
|
|
19
|
-
*/
|
|
20
|
-
export function resolveTaskDeadline(sprintId, endDate, today = new Date()) {
|
|
21
|
-
if (sprintId === null || endDate)
|
|
22
|
-
return endDate ?? null;
|
|
23
|
-
const d = new Date(today);
|
|
24
|
-
d.setDate(d.getDate() + SPRINT_DEADLINE_FALLBACK_DAYS);
|
|
25
|
-
const pad = (n) => String(n).padStart(2, '0');
|
|
26
|
-
return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;
|
|
27
|
-
}
|
|
28
|
-
//# sourceMappingURL=sprint-deadline.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sprint-deadline.js","sourceRoot":"","sources":["../../src/lib/sprint-deadline.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,8EAA8E;AAC9E,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC;AAE/C;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,QAAuB,EACvB,OAAkC,EAClC,QAAc,IAAI,IAAI,EAAE;IAExB,IAAI,QAAQ,KAAK,IAAI,IAAI,OAAO;QAAE,OAAO,OAAO,IAAI,IAAI,CAAC;IACzD,MAAM,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,6BAA6B,CAAC,CAAC;IACvD,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtD,OAAO,GAAG,CAAC,CAAC,WAAW,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;AAC3E,CAAC"}
|
package/dist/lib/sprint-logic.js
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { FINISHED_STATUSES } from '../core/types.js';
|
|
2
|
-
/** Plano de encerramento: quem volta pro backlog e quem fica. Pura. */
|
|
3
|
-
export function planSprintEnd(tasks) {
|
|
4
|
-
const toBacklog = [];
|
|
5
|
-
const kept = [];
|
|
6
|
-
for (const t of tasks)
|
|
7
|
-
(FINISHED_STATUSES.includes(t.status) ? kept : toBacklog).push(t.id);
|
|
8
|
-
return { toBacklog, kept };
|
|
9
|
-
}
|
|
10
|
-
/** Contagem por status + vencidas (end_date < hoje, fora de done/production). Pura. */
|
|
11
|
-
export function summarizeSprintTasks(tasks, today) {
|
|
12
|
-
const by_status = {};
|
|
13
|
-
for (const t of tasks)
|
|
14
|
-
by_status[t.status] = (by_status[t.status] ?? 0) + 1;
|
|
15
|
-
const overdue = tasks
|
|
16
|
-
.filter((t) => t.end_date && t.end_date < today && !FINISHED_STATUSES.includes(t.status))
|
|
17
|
-
.map(({ key, title, end_date }) => ({ key, title, end_date }));
|
|
18
|
-
return { total: tasks.length, by_status, overdue };
|
|
19
|
-
}
|
|
20
|
-
/** Encerra a sprint: tasks primeiro, sprint depois. Já encerrada = no-op (preserva end_date). */
|
|
21
|
-
export async function closeSprint(gw, sprint, today) {
|
|
22
|
-
if (sprint.status === 'encerrada') {
|
|
23
|
-
return { sprint, already_closed: true, returned_to_backlog: 0, kept_done: 0 };
|
|
24
|
-
}
|
|
25
|
-
const tasks = await gw.listSprintTasks(sprint.id);
|
|
26
|
-
const { toBacklog, kept } = planSprintEnd(tasks);
|
|
27
|
-
await gw.returnTasksToBacklog(toBacklog);
|
|
28
|
-
const updated = await gw.updateSprint(sprint.id, { status: 'encerrada', end_date: today });
|
|
29
|
-
return { sprint: updated, already_closed: false, returned_to_backlog: toBacklog.length, kept_done: kept.length };
|
|
30
|
-
}
|
|
31
|
-
//# sourceMappingURL=sprint-logic.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sprint-logic.js","sourceRoot":"","sources":["../../src/lib/sprint-logic.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAsC,MAAM,kBAAkB,CAAC;AAEzF,uEAAuE;AACvE,MAAM,UAAU,aAAa,CAAC,KAAsB;IAClD,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC5F,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC7B,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,oBAAoB,CAAC,KAAsB,EAAE,KAAa;IACxE,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC5E,MAAM,OAAO,GAAG,KAAK;SAClB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,GAAG,KAAK,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;SACxF,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IACjE,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AACrD,CAAC;AAED,iGAAiG;AACjG,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAAiB,EAAE,MAAiB,EAAE,KAAa;IACnF,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,mBAAmB,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IAChF,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAClD,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACjD,MAAM,EAAE,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAC3F,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,mBAAmB,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;AACnH,CAAC"}
|
package/dist/lib/targets.js
DELETED
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
import { existsSync } from 'node:fs';
|
|
2
|
-
import { homedir } from 'node:os';
|
|
3
|
-
import { join } from 'node:path';
|
|
4
|
-
import { toSkillDocs } from './skills.js';
|
|
5
|
-
import { readJson, readToml } from './file-merge.js';
|
|
6
|
-
export const claudeTarget = {
|
|
7
|
-
id: 'claude',
|
|
8
|
-
label: 'Claude Code (~/.claude)',
|
|
9
|
-
surface: 'claude-code',
|
|
10
|
-
targetDir: () => join(homedir(), '.claude'),
|
|
11
|
-
mapDocs: (docs) => docs,
|
|
12
|
-
};
|
|
13
|
-
/**
|
|
14
|
-
* Texto que substitui `$ARGUMENTS` na tradução pro Codex. Skills do Codex são
|
|
15
|
-
* selecionadas por descrição e dirigidas por linguagem natural — não há
|
|
16
|
-
* substituição de slash-args como no caminho de command/prompt do Claude.
|
|
17
|
-
*/
|
|
18
|
-
const ARGS_REWORD = 'the arguments the user provided';
|
|
19
|
-
/** Escapa uma descrição pra uma linha de YAML entre aspas duplas. */
|
|
20
|
-
function yamlQuote(value) {
|
|
21
|
-
const oneLine = value.replace(/\r?\n/g, ' ').replace(/\s+/g, ' ').trim();
|
|
22
|
-
return `"${oneLine.replace(/\\/g, '\\\\').replace(/"/g, '\\"')}"`;
|
|
23
|
-
}
|
|
24
|
-
/** Renderiza o SKILL.md de um node no formato Agent Skills (name + description). */
|
|
25
|
-
export function toCodexSkillContent(node) {
|
|
26
|
-
const description = node.frontmatter.description || node.description || node.title;
|
|
27
|
-
const frontmatter = `---\nname: ${node.id}\ndescription: ${yamlQuote(description)}\n---\n`;
|
|
28
|
-
let body = node.content;
|
|
29
|
-
if (body.includes('$ARGUMENTS')) {
|
|
30
|
-
body = body.split('$ARGUMENTS').join(ARGS_REWORD);
|
|
31
|
-
}
|
|
32
|
-
// `argument-hint` não existe em skills — dobra num aviso de entrada esperada.
|
|
33
|
-
const hint = node.frontmatter['argument-hint'];
|
|
34
|
-
const inputLine = hint ? `**Expected input:** ${hint}\n\n` : '';
|
|
35
|
-
return `${frontmatter}\n${inputLine}${body.trim()}\n`;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Renderiza um custom prompt do Codex (`~/.codex/prompts/<id>.md`). Diferente da skill,
|
|
39
|
-
* o Codex expande `$ARGUMENTS`/`$1..$9` aqui, então preservamos os placeholders.
|
|
40
|
-
*/
|
|
41
|
-
export function toCodexPromptContent(node) {
|
|
42
|
-
const description = node.frontmatter.description || node.description || node.title;
|
|
43
|
-
const hint = node.frontmatter['argument-hint'];
|
|
44
|
-
const fmLines = [`description: ${yamlQuote(description)}`];
|
|
45
|
-
if (hint)
|
|
46
|
-
fmLines.push(`argument-hint: ${yamlQuote(hint)}`);
|
|
47
|
-
const frontmatter = `---\n${fmLines.join('\n')}\n---\n`;
|
|
48
|
-
// Corpo original, com `$ARGUMENTS`/`$1` intactos (o Codex substitui na invocação).
|
|
49
|
-
return `${frontmatter}\n${node.content.trim()}\n`;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Traduz os docs crus pro layout do Codex em dual-write: cada `command`/`skill` vira
|
|
53
|
-
* uma skill (`skills/<id>/SKILL.md`) E um custom prompt (`prompts/<id>.md`). Os
|
|
54
|
-
* arquivos de apoio de uma skill (`templates/*.md`, `*-PATTERN.md`, `STANDARDS.md` —
|
|
55
|
-
* type `doc`, vizinhos do `SKILL.md`) são carregados pra dentro de `skills/<id>/`
|
|
56
|
-
* preservando o path relativo, pra que o SKILL.md traduzido consiga referenciá-los
|
|
57
|
-
* exatamente como no Claude. `agent` e `doc` fora de uma skill são ignorados.
|
|
58
|
-
*/
|
|
59
|
-
export function toCodexDocs(docs) {
|
|
60
|
-
const nodes = toSkillDocs(docs.map((d) => ({ path: d.relPath, raw: d.content.toString('utf8') })));
|
|
61
|
-
const rawByPath = new Map(docs.map((d) => [d.relPath, d.content]));
|
|
62
|
-
// Pasta da skill (dir do SKILL.md) -> id, pra rotear os arquivos de apoio.
|
|
63
|
-
const skillFolders = new Map();
|
|
64
|
-
for (const node of nodes) {
|
|
65
|
-
if (node.type === 'skill') {
|
|
66
|
-
skillFolders.set(node.path.slice(0, node.path.lastIndexOf('/')), node.id);
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
const out = [];
|
|
70
|
-
const seen = new Map(); // id -> path de origem (guarda de colisão)
|
|
71
|
-
for (const node of nodes) {
|
|
72
|
-
if (node.type === 'command' || node.type === 'skill') {
|
|
73
|
-
const prev = seen.get(node.id);
|
|
74
|
-
if (prev) {
|
|
75
|
-
throw new Error(`Tradução Codex: id duplicado "${node.id}" (${prev} e ${node.path}). ` +
|
|
76
|
-
`O id precisa ser único — renomeie um deles.`);
|
|
77
|
-
}
|
|
78
|
-
seen.set(node.id, node.path);
|
|
79
|
-
out.push({
|
|
80
|
-
relPath: `skills/${node.id}/SKILL.md`,
|
|
81
|
-
content: Buffer.from(toCodexSkillContent(node), 'utf8'),
|
|
82
|
-
});
|
|
83
|
-
out.push({
|
|
84
|
-
relPath: `prompts/${node.id}.md`,
|
|
85
|
-
content: Buffer.from(toCodexPromptContent(node), 'utf8'),
|
|
86
|
-
});
|
|
87
|
-
continue;
|
|
88
|
-
}
|
|
89
|
-
// Arquivo de apoio de uma skill: carrega verbatim pro dir da skill traduzida,
|
|
90
|
-
// mantendo o path relativo (ex.: `templates/spec.md`, `SPEC-PATTERN.md`).
|
|
91
|
-
if (node.type === 'doc') {
|
|
92
|
-
for (const [folder, id] of skillFolders) {
|
|
93
|
-
if (!node.path.startsWith(`${folder}/`))
|
|
94
|
-
continue;
|
|
95
|
-
const rel = node.path.slice(folder.length + 1);
|
|
96
|
-
const raw = rawByPath.get(node.path);
|
|
97
|
-
if (raw)
|
|
98
|
-
out.push({ relPath: `skills/${id}/${rel}`, content: raw });
|
|
99
|
-
break;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
return out;
|
|
104
|
-
}
|
|
105
|
-
export const codexTarget = {
|
|
106
|
-
id: 'codex',
|
|
107
|
-
label: 'Codex CLI (~/.codex)',
|
|
108
|
-
surface: 'codex',
|
|
109
|
-
targetDir: () => join(homedir(), '.codex'),
|
|
110
|
-
mapDocs: (docs) => toCodexDocs(docs),
|
|
111
|
-
};
|
|
112
|
-
export const ALL_TARGETS = [claudeTarget, codexTarget];
|
|
113
|
-
function claudeConfigured() {
|
|
114
|
-
const path = join(homedir(), '.claude', 'settings.json');
|
|
115
|
-
if (!existsSync(path))
|
|
116
|
-
return false;
|
|
117
|
-
try {
|
|
118
|
-
const json = (readJson(path) ?? {});
|
|
119
|
-
return Boolean(json.mcpServers?.noclaf);
|
|
120
|
-
}
|
|
121
|
-
catch {
|
|
122
|
-
return false;
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
function codexConfigured() {
|
|
126
|
-
const path = join(homedir(), '.codex', 'config.toml');
|
|
127
|
-
if (!existsSync(path))
|
|
128
|
-
return false;
|
|
129
|
-
try {
|
|
130
|
-
const toml = (readToml(path) ?? {});
|
|
131
|
-
return Boolean(toml.mcp_servers?.noclaf);
|
|
132
|
-
}
|
|
133
|
-
catch {
|
|
134
|
-
return false;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Alvos que já têm o servidor `noclaf` configurado (~/.claude/settings.json,
|
|
139
|
-
* ~/.codex/config.toml). Base do auto-detect de `sync`: provisiona pra cada
|
|
140
|
-
* cliente que o worker de fato usa, sem flags.
|
|
141
|
-
*/
|
|
142
|
-
export function detectConfiguredTargets() {
|
|
143
|
-
const targets = [];
|
|
144
|
-
if (claudeConfigured())
|
|
145
|
-
targets.push(claudeTarget);
|
|
146
|
-
if (codexConfigured())
|
|
147
|
-
targets.push(codexTarget);
|
|
148
|
-
return targets;
|
|
149
|
-
}
|
|
150
|
-
//# sourceMappingURL=targets.js.map
|
package/dist/lib/targets.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"targets.js","sourceRoot":"","sources":["../../src/lib/targets.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/task-history.js
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { brand } from '../brand.js';
|
|
2
|
-
export async function insertTaskHistory(supabase, entry) {
|
|
3
|
-
const { error } = await supabase.from('task_history').insert({
|
|
4
|
-
task_id: entry.task_id,
|
|
5
|
-
user_id: entry.user_id,
|
|
6
|
-
action: entry.action,
|
|
7
|
-
field: entry.field ?? null,
|
|
8
|
-
old_value: entry.old_value ?? null,
|
|
9
|
-
new_value: entry.new_value ?? null,
|
|
10
|
-
});
|
|
11
|
-
if (error) {
|
|
12
|
-
console.error(`[${brand.mcpBinName}] falha ao gravar task_history: ${error.message}`);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=task-history.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"task-history.js","sourceRoot":"","sources":["../../src/lib/task-history.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAWpC,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,QAAkB,EAClB,KAAmB;IAEnB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC;QAC3D,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,IAAI;QAC1B,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;QAClC,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;KACnC,CAAC,CAAC;IACH,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,mCAAmC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACxF,CAAC;AACH,CAAC"}
|
package/dist/lib/telemetry.js
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { env } from "../brand.js";
|
|
2
|
-
function enabled() {
|
|
3
|
-
return env("TELEMETRY") !== "0" && !env("NO_TELEMETRY");
|
|
4
|
-
}
|
|
5
|
-
/**
|
|
6
|
-
* Items (skills/commands/agents) provisionados a partir do plano do `provision`,
|
|
7
|
-
* já resolvidos pro id sequencial estável (via `uidByName`).
|
|
8
|
-
*/
|
|
9
|
-
export function provisionedItems(files, uidByName) {
|
|
10
|
-
const seen = new Set();
|
|
11
|
-
const items = [];
|
|
12
|
-
for (const f of files) {
|
|
13
|
-
const m = /^skills\/([^/]+)\/SKILL\.md$/.exec(f.relPath) ??
|
|
14
|
-
/^commands\/([^/]+)\.md$/.exec(f.relPath) ??
|
|
15
|
-
/^agents\/([^/]+)\.md$/.exec(f.relPath);
|
|
16
|
-
if (m && !seen.has(m[1])) {
|
|
17
|
-
seen.add(m[1]);
|
|
18
|
-
items.push({ name: m[1], id: uidByName.get(m[1]) ?? null });
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
return items.sort((a, b) => a.name.localeCompare(b.name));
|
|
22
|
-
}
|
|
23
|
-
// Requisições em voo — o CLI é curto e pode encerrar antes do POST completar,
|
|
24
|
-
// então guardamos as promises pra dar flush (`flushTelemetry`) antes de sair.
|
|
25
|
-
const pending = [];
|
|
26
|
-
/** Envia um evento de uso pro NOS. Best-effort, nunca lança. */
|
|
27
|
-
export function track(supabase, event) {
|
|
28
|
-
if (!supabase || !enabled())
|
|
29
|
-
return;
|
|
30
|
-
const p = supabase.functions
|
|
31
|
-
.invoke("track-usage", { body: { ...event, at: new Date().toISOString() } })
|
|
32
|
-
.then(() => undefined)
|
|
33
|
-
.catch(() => {
|
|
34
|
-
/* telemetria nunca quebra o fluxo */
|
|
35
|
-
});
|
|
36
|
-
pending.push(p);
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Espera as requisições de telemetria em voo (com teto de tempo) antes do CLI sair.
|
|
40
|
-
* No servidor MCP (long-lived) não é necessário — o loop já mantém o processo vivo.
|
|
41
|
-
*/
|
|
42
|
-
export async function flushTelemetry(timeoutMs = 4000) {
|
|
43
|
-
if (pending.length === 0)
|
|
44
|
-
return;
|
|
45
|
-
const inflight = Promise.allSettled(pending.splice(0));
|
|
46
|
-
await Promise.race([
|
|
47
|
-
inflight,
|
|
48
|
-
new Promise((resolve) => setTimeout(resolve, timeoutMs)),
|
|
49
|
-
]);
|
|
50
|
-
}
|
|
51
|
-
//# sourceMappingURL=telemetry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/lib/telemetry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAgClC,SAAS,OAAO;IACd,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAC1D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAA4B,EAC5B,SAAqC;IAErC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,CAAC,GACL,8BAA8B,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YAC9C,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;YACzC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,8EAA8E;AAC9E,8EAA8E;AAC9E,MAAM,OAAO,GAAuB,EAAE,CAAC;AAEvC,gEAAgE;AAChE,MAAM,UAAU,KAAK,CAAC,QAAyB,EAAE,KAAiB;IAChE,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,EAAE;QAAE,OAAO;IACpC,MAAM,CAAC,GAAG,QAAQ,CAAC,SAAS;SACzB,MAAM,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,EAAE,CAAC;SAC3E,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;SACrB,KAAK,CAAC,GAAG,EAAE;QACV,qCAAqC;IACvC,CAAC,CAAC,CAAC;IACL,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,SAAS,GAAG,IAAI;IACnD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACvD,MAAM,OAAO,CAAC,IAAI,CAAC;QACjB,QAAQ;QACR,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;KAC/D,CAAC,CAAC;AACL,CAAC"}
|
package/dist/lib/tool-result.js
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { humanizePgError } from './pg-error.js';
|
|
2
|
-
export function jsonResult(data) {
|
|
3
|
-
return {
|
|
4
|
-
content: [{ type: 'text', text: JSON.stringify(data, null, 2) }],
|
|
5
|
-
};
|
|
6
|
-
}
|
|
7
|
-
/** Erro de tool. Passa pelo tradutor de constraint do Postgres: nome interno de
|
|
8
|
-
* invariante do banco nunca chega ao cliente MCP, venha de onde vier. */
|
|
9
|
-
export function errorResult(message) {
|
|
10
|
-
return {
|
|
11
|
-
content: [{ type: 'text', text: humanizePgError(message) }],
|
|
12
|
-
isError: true,
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=tool-result.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tool-result.js","sourceRoot":"","sources":["../../src/lib/tool-result.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,MAAM,UAAU,UAAU,CAAC,IAAa;IACtC,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;KACjE,CAAC;AACJ,CAAC;AAED;yEACyE;AACzE,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3D,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC"}
|