@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
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"require-config.js","sourceRoot":"","sources":["../../src/lib/require-config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAsB,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAClC,GAAgB,EAChB,iBAA0B;IAE1B,MAAM,SAAS,GAAG,iBAAiB,IAAI,mBAAmB,EAAE,IAAI,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC;IAEvF,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,WAAW,CAChB,qCAAqC,KAAK,CAAC,UAAU,qCAAqC;YACxF,KAAK,KAAK,CAAC,UAAU,6EAA6E,CACrG,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAChC,OAAO,WAAW,CAAC,wCAAwC,SAAS,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,MAAM,GAAkB,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;IACxD,IAAI,SAAS,KAAK,GAAG,CAAC,MAAM,EAAE,UAAU,IAAI,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,CAAC;QACtE,MAAM,CAAC,aAAa,GAAG,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC;IAClD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,SAAS,IAAI,KAAK,CAAC;AAC3E,CAAC"}
|
package/dist/lib/rules.js
DELETED
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
-
import { join } from 'node:path';
|
|
3
|
-
import { skillsDir } from './skills.js';
|
|
4
|
-
import { DEV_ROLE, GENERAL } from './sections.js';
|
|
5
|
-
/**
|
|
6
|
-
* Rules do harness — convenções versionadas no `noclaf-skills`, na mesma taxonomia
|
|
7
|
-
* da seleção: `rules/<role>/<área|general>/<stack|general>/rules.md`. O geral do role
|
|
8
|
-
* fica em `rules/<role>/general/general-rules.md`.
|
|
9
|
-
*
|
|
10
|
-
* Este módulo lê + concatena (determinístico) pela `Selection`, e o CLI grava o
|
|
11
|
-
* resultado no repo (`docs/_rules`). Rules são de código → só o role `dev`.
|
|
12
|
-
*/
|
|
13
|
-
const RULES_ROOT = 'rules';
|
|
14
|
-
function rulePath(dir, ...seg) {
|
|
15
|
-
return join(dir, RULES_ROOT, ...seg);
|
|
16
|
-
}
|
|
17
|
-
/** Separa o frontmatter (`--- … ---`) do corpo. */
|
|
18
|
-
function splitFrontmatter(raw) {
|
|
19
|
-
const m = /^---\r?\n([\s\S]*?)\r?\n---\r?\n?/.exec(raw);
|
|
20
|
-
if (!m)
|
|
21
|
-
return { fm: {}, body: raw };
|
|
22
|
-
const fm = {};
|
|
23
|
-
for (const line of m[1].split(/\r?\n/)) {
|
|
24
|
-
const mm = /^([A-Za-z0-9_-]+):\s*(.*)$/.exec(line);
|
|
25
|
-
if (mm)
|
|
26
|
-
fm[mm[1]] = mm[2].trim();
|
|
27
|
-
}
|
|
28
|
-
return { fm, body: raw.slice(m[0].length) };
|
|
29
|
-
}
|
|
30
|
-
/** Rebaixa headings um nível (`##` → `###`) pra aninharem sob o cabeçalho do bloco. */
|
|
31
|
-
function demoteHeadings(md) {
|
|
32
|
-
return md.replace(/^(#{1,5})(\s)/gm, '#$1$2');
|
|
33
|
-
}
|
|
34
|
-
/** Corpo (sem frontmatter, headings rebaixados) de um arquivo de regra, ou `null`. */
|
|
35
|
-
function readRuleBody(path) {
|
|
36
|
-
if (!existsSync(path))
|
|
37
|
-
return null;
|
|
38
|
-
const body = splitFrontmatter(readFileSync(path, 'utf8')).body.trim();
|
|
39
|
-
return body.length > 0 ? demoteHeadings(body) : null;
|
|
40
|
-
}
|
|
41
|
-
/** Cabeçalho canônico da seção de critérios de review nas rules (ver `rules/README.md`). */
|
|
42
|
-
export const REVIEW_HEADING = 'Critérios de review';
|
|
43
|
-
/**
|
|
44
|
-
* Extrai o corpo de uma seção `## <heading>` do markdown — da linha do heading até o próximo
|
|
45
|
-
* `## ` (mesmo nível) ou o fim. `null` se a seção não existe ou está vazia. Pura.
|
|
46
|
-
*/
|
|
47
|
-
export function extractSection(md, heading) {
|
|
48
|
-
const lines = md.split(/\r?\n/);
|
|
49
|
-
const start = lines.findIndex((l) => l.trim() === `## ${heading}`);
|
|
50
|
-
if (start === -1)
|
|
51
|
-
return null;
|
|
52
|
-
const rest = lines.slice(start + 1);
|
|
53
|
-
const end = rest.findIndex((l) => /^##\s/.test(l));
|
|
54
|
-
const body = (end === -1 ? rest : rest.slice(0, end)).join('\n').trim();
|
|
55
|
-
return body.length > 0 ? body : null;
|
|
56
|
-
}
|
|
57
|
-
/** Seção `## Critérios de review` (sem rebaixar headings — é checklist) de um arquivo, ou `null`. */
|
|
58
|
-
function readRuleSection(path, heading) {
|
|
59
|
-
if (!existsSync(path))
|
|
60
|
-
return null;
|
|
61
|
-
return extractSection(splitFrontmatter(readFileSync(path, 'utf8')).body, heading);
|
|
62
|
-
}
|
|
63
|
-
/** Skills recomendadas (frontmatter `skills:`) de um arquivo de regra. */
|
|
64
|
-
function ruleSkillsAt(path) {
|
|
65
|
-
if (!existsSync(path))
|
|
66
|
-
return [];
|
|
67
|
-
return (splitFrontmatter(readFileSync(path, 'utf8')).fm.skills ?? '')
|
|
68
|
-
.split(/[,\s]+/)
|
|
69
|
-
.map((s) => s.trim())
|
|
70
|
-
.filter(Boolean);
|
|
71
|
-
}
|
|
72
|
-
/** Arquivo de regra geral do role (`rules/<role>/general/general-rules.md`, ou `rules.md`). */
|
|
73
|
-
function generalRule(dir) {
|
|
74
|
-
const named = rulePath(dir, DEV_ROLE, GENERAL, 'general-rules.md');
|
|
75
|
-
return existsSync(named) ? named : rulePath(dir, DEV_ROLE, GENERAL, 'rules.md');
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Concatena o harness pela seleção: geral do role + (por área selecionada) o geral da
|
|
79
|
-
* área + o **stack** escolhido. Ordenado (general → áreas alfabéticas). String vazia se
|
|
80
|
-
* nada aplicável. Só o role `dev` tem rules.
|
|
81
|
-
*/
|
|
82
|
-
export function concatenateRules(sel, dir = skillsDir()) {
|
|
83
|
-
if (!sel.roles.includes(DEV_ROLE))
|
|
84
|
-
return '';
|
|
85
|
-
const blocks = [];
|
|
86
|
-
const general = readRuleBody(generalRule(dir));
|
|
87
|
-
if (general)
|
|
88
|
-
blocks.push(`## general\n\n${general}`);
|
|
89
|
-
for (const area of Object.keys(sel.stacks).sort()) {
|
|
90
|
-
const areaGeneral = readRuleBody(rulePath(dir, DEV_ROLE, area, GENERAL, 'rules.md'));
|
|
91
|
-
if (areaGeneral)
|
|
92
|
-
blocks.push(`## ${area}\n\n${areaGeneral}`);
|
|
93
|
-
const stack = sel.stacks[area];
|
|
94
|
-
if (stack && stack !== GENERAL) {
|
|
95
|
-
const body = readRuleBody(rulePath(dir, DEV_ROLE, area, stack, 'rules.md'));
|
|
96
|
-
if (body)
|
|
97
|
-
blocks.push(`## ${area} · ${stack}\n\n${body}`);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
return blocks.join('\n\n');
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Concatena os `## Critérios de review` das rules selecionadas (general → áreas alfabéticas →
|
|
104
|
-
* stack), na MESMA ordem do `concatenateRules`. É a fonte única da rubrica de review
|
|
105
|
-
* (`docs/_review.md`) — determinístico: mesma seleção+bundle → mesma saída. Só o role `dev`.
|
|
106
|
-
*/
|
|
107
|
-
export function concatenateReviewCriteria(sel, dir = skillsDir()) {
|
|
108
|
-
if (!sel.roles.includes(DEV_ROLE))
|
|
109
|
-
return '';
|
|
110
|
-
const blocks = [];
|
|
111
|
-
const general = readRuleSection(generalRule(dir), REVIEW_HEADING);
|
|
112
|
-
if (general)
|
|
113
|
-
blocks.push(`## general\n\n${general}`);
|
|
114
|
-
for (const area of Object.keys(sel.stacks).sort()) {
|
|
115
|
-
const areaGeneral = readRuleSection(rulePath(dir, DEV_ROLE, area, GENERAL, 'rules.md'), REVIEW_HEADING);
|
|
116
|
-
if (areaGeneral)
|
|
117
|
-
blocks.push(`## ${area}\n\n${areaGeneral}`);
|
|
118
|
-
const stack = sel.stacks[area];
|
|
119
|
-
if (stack && stack !== GENERAL) {
|
|
120
|
-
const body = readRuleSection(rulePath(dir, DEV_ROLE, area, stack, 'rules.md'), REVIEW_HEADING);
|
|
121
|
-
if (body)
|
|
122
|
-
blocks.push(`## ${area} · ${stack}\n\n${body}`);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
return blocks.join('\n\n');
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Skills recomendadas (skills.sh, do frontmatter `skills:`) das áreas/stacks
|
|
129
|
-
* selecionadas — do `rules.md` da área + do stack escolhido. Deduplicado.
|
|
130
|
-
*/
|
|
131
|
-
export function collectRuleSkills(sel, dir = skillsDir()) {
|
|
132
|
-
if (!sel.roles.includes(DEV_ROLE))
|
|
133
|
-
return [];
|
|
134
|
-
const out = new Set();
|
|
135
|
-
for (const area of Object.keys(sel.stacks)) {
|
|
136
|
-
for (const s of ruleSkillsAt(rulePath(dir, DEV_ROLE, area, GENERAL, 'rules.md')))
|
|
137
|
-
out.add(s);
|
|
138
|
-
const stack = sel.stacks[area];
|
|
139
|
-
if (stack && stack !== GENERAL) {
|
|
140
|
-
for (const s of ruleSkillsAt(rulePath(dir, DEV_ROLE, area, stack, 'rules.md')))
|
|
141
|
-
out.add(s);
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
return [...out];
|
|
145
|
-
}
|
|
146
|
-
//# sourceMappingURL=rules.js.map
|
package/dist/lib/rules.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"rules.js","sourceRoot":"","sources":["../../src/lib/rules.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/sections.js
DELETED
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
import { existsSync, readdirSync } from 'node:fs';
|
|
2
|
-
import { join } from 'node:path';
|
|
3
|
-
/**
|
|
4
|
-
* Seleção unificada de conteúdo por **role → área → stack**, com `general` em cascata.
|
|
5
|
-
* Um só modelo dita skills, rules e dependencies — o que o usuário preenche no `init`
|
|
6
|
-
* filtra os três igual.
|
|
7
|
-
*
|
|
8
|
-
* Taxonomia (uniforme nos kinds versionados):
|
|
9
|
-
* skills/<role>/<área|general>/<stack|general>/<skill>/SKILL.md
|
|
10
|
-
* rules/<role>/<área|general>/<stack|general>/rules.md
|
|
11
|
-
* dependencies/<role>/<área|general>/<stack|general>/*.md
|
|
12
|
-
* agents/<role>/<name>.md (role, sem área/stack)
|
|
13
|
-
* commands/<name>.md · hooks/* (flat — sempre dev)
|
|
14
|
-
*
|
|
15
|
-
* Regra de inclusão: role selecionado; `general` do role entra sempre; uma área só
|
|
16
|
-
* entra se selecionada, e dentro dela só o `general` da área + o **stack escolhido**.
|
|
17
|
-
*/
|
|
18
|
-
export const GENERAL = 'general';
|
|
19
|
-
export const DEV_ROLE = 'dev';
|
|
20
|
-
/** Roles = subpastas de topo de `skills/` (ex.: `dev`, `management`). */
|
|
21
|
-
export function discoverRoles(dir) {
|
|
22
|
-
return subdirs(join(dir, 'skills'));
|
|
23
|
-
}
|
|
24
|
-
/** Áreas de um role = subpastas de `skills/<role>/` menos `general`. */
|
|
25
|
-
export function discoverAreas(dir, role) {
|
|
26
|
-
return subdirs(join(dir, 'skills', role)).filter((a) => a !== GENERAL);
|
|
27
|
-
}
|
|
28
|
-
/** Stacks de uma área = subpastas de `skills/<role>/<área>/` menos `general`. */
|
|
29
|
-
export function discoverStacks(dir, role, area) {
|
|
30
|
-
return subdirs(join(dir, 'skills', role, area)).filter((s) => s !== GENERAL);
|
|
31
|
-
}
|
|
32
|
-
function subdirs(root) {
|
|
33
|
-
if (!existsSync(root))
|
|
34
|
-
return [];
|
|
35
|
-
return readdirSync(root, { withFileTypes: true })
|
|
36
|
-
.filter((e) => e.isDirectory() && !e.name.startsWith('.'))
|
|
37
|
-
.map((e) => e.name)
|
|
38
|
-
.sort();
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* Um path é incluído na seleção? Vale pra qualquer kind — aplica a gramática da taxonomia.
|
|
42
|
-
* `commands`/`hooks` são flat e sempre-dev; `agents` filtra por role; `skills`/`rules`/
|
|
43
|
-
* `dependencies` filtram por role → área → stack com `general` em cascata.
|
|
44
|
-
*/
|
|
45
|
-
export function includePath(relPath, sel) {
|
|
46
|
-
const parts = relPath.split('/');
|
|
47
|
-
const kind = parts[0];
|
|
48
|
-
if (kind === 'commands' || kind === 'hooks')
|
|
49
|
-
return sel.roles.includes(DEV_ROLE);
|
|
50
|
-
const role = parts[1];
|
|
51
|
-
if (!sel.roles.includes(role))
|
|
52
|
-
return false;
|
|
53
|
-
if (kind === 'agents')
|
|
54
|
-
return true; // role já bateu; agents não têm área/stack
|
|
55
|
-
const seg2 = parts[2];
|
|
56
|
-
if (seg2 === undefined || seg2 === GENERAL)
|
|
57
|
-
return true; // geral do role
|
|
58
|
-
if (!(seg2 in sel.stacks))
|
|
59
|
-
return false; // área não selecionada
|
|
60
|
-
const seg3 = parts[3];
|
|
61
|
-
return seg3 === GENERAL || seg3 === sel.stacks[seg2]; // geral da área ou stack escolhido
|
|
62
|
-
}
|
|
63
|
-
/** Filtra docs pela seleção. `undefined` → tudo (sem filtro). */
|
|
64
|
-
export function filterForSelection(docs, sel) {
|
|
65
|
-
if (!sel)
|
|
66
|
-
return docs;
|
|
67
|
-
return docs.filter((d) => includePath(d.relPath, sel));
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* Achata os segmentos de taxonomia pro layout on-disk do cliente:
|
|
71
|
-
* skills/<role>/general/<skill>/… → skills/<skill>/…
|
|
72
|
-
* skills/<role>/<área>/<stack>/<skill>/… → skills/<skill>/…
|
|
73
|
-
* agents/<role>/<name> → agents/<name>
|
|
74
|
-
* commands/<name> · hooks/* → inalterado (já flat)
|
|
75
|
-
*/
|
|
76
|
-
export function flattenSelection(docs) {
|
|
77
|
-
return docs.map((d) => {
|
|
78
|
-
const parts = d.relPath.split('/');
|
|
79
|
-
const kind = parts[0];
|
|
80
|
-
if (kind === 'agents')
|
|
81
|
-
return { ...d, relPath: `agents/${parts.slice(2).join('/')}` };
|
|
82
|
-
if (kind === 'skills') {
|
|
83
|
-
const rest = parts[2] === GENERAL ? parts.slice(3) : parts.slice(4);
|
|
84
|
-
return { ...d, relPath: `skills/${rest.join('/')}` };
|
|
85
|
-
}
|
|
86
|
-
return d;
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
//# sourceMappingURL=sections.js.map
|
package/dist/lib/sections.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sections.js","sourceRoot":"","sources":["../../src/lib/sections.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/skill-agent.js
DELETED
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
import { spawnSync } from 'node:child_process';
|
|
2
|
-
import { readSkillDocs } from './skills.js';
|
|
3
|
-
/** Corpo da skill como prompt (fonte única); ausente do cache → fallback do caller. */
|
|
4
|
-
export function skillPrompt(id, fallback) {
|
|
5
|
-
try {
|
|
6
|
-
const doc = readSkillDocs().find((d) => d.id === id && d.type === 'skill');
|
|
7
|
-
if (doc?.content.trim())
|
|
8
|
-
return doc.content.trim();
|
|
9
|
-
}
|
|
10
|
-
catch {
|
|
11
|
-
/* skill ausente do cache → fallback */
|
|
12
|
-
}
|
|
13
|
-
return fallback;
|
|
14
|
-
}
|
|
15
|
-
/** Existe um binário no PATH (via `--version`)? */
|
|
16
|
-
function hasBin(bin) {
|
|
17
|
-
try {
|
|
18
|
-
return !spawnSync(bin, ['--version'], { stdio: 'ignore' }).error;
|
|
19
|
-
}
|
|
20
|
-
catch {
|
|
21
|
-
return false;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Roda o prompt num agente headless no `cwd`. Prefere `claude`, cai pro `codex`;
|
|
26
|
-
* sem nenhum no PATH, não roda (`ran:false`).
|
|
27
|
-
*/
|
|
28
|
-
export function runSkillAgent(prompt, opts) {
|
|
29
|
-
// stdin ignorado (o prompt vai por arg) — evita o agente ficar esperando stdin.
|
|
30
|
-
const stdio = ['ignore', opts.stdoutFd ?? 1, 2];
|
|
31
|
-
if (hasBin('claude')) {
|
|
32
|
-
const r = spawnSync('claude', ['-p', prompt, '--permission-mode', 'acceptEdits'], {
|
|
33
|
-
cwd: opts.cwd,
|
|
34
|
-
stdio,
|
|
35
|
-
});
|
|
36
|
-
return { ran: true, ok: !r.error && r.status === 0, agent: 'claude' };
|
|
37
|
-
}
|
|
38
|
-
if (hasBin('codex')) {
|
|
39
|
-
const r = spawnSync('codex', ['exec', prompt], { cwd: opts.cwd, stdio });
|
|
40
|
-
return { ran: true, ok: !r.error && r.status === 0, agent: 'codex' };
|
|
41
|
-
}
|
|
42
|
-
return { ran: false, reason: 'sem `claude` nem `codex` no PATH pra rodar a análise' };
|
|
43
|
-
}
|
|
44
|
-
//# sourceMappingURL=skill-agent.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-agent.js","sourceRoot":"","sources":["../../src/lib/skill-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAgB5C,uFAAuF;AACvF,MAAM,UAAU,WAAW,CAAC,EAAU,EAAE,QAAgB;IACtD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;QAC3E,IAAI,GAAG,EAAE,OAAO,CAAC,IAAI,EAAE;YAAE,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,uCAAuC;IACzC,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,mDAAmD;AACnD,SAAS,MAAM,CAAC,GAAW;IACzB,IAAI,CAAC;QACH,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC;IACnE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAQD;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,MAAc,EAAE,IAAqB;IACjE,gFAAgF;IAChF,MAAM,KAAK,GAAyB,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAEtE,IAAI,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,SAAS,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,mBAAmB,EAAE,aAAa,CAAC,EAAE;YAChF,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,KAAK;SACN,CAAC,CAAC;QACH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IACxE,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QACpB,MAAM,CAAC,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QACzE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACvE,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,sDAAsD,EAAE,CAAC;AACxF,CAAC"}
|
package/dist/lib/skill-serve.js
DELETED
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
import { readSkillFiles, toSkillDocs } from './skills.js';
|
|
2
|
-
/**
|
|
3
|
-
* Camada de **serviço** do pacote de skills pro servidor MCP: expõe os docs como
|
|
4
|
-
* resources (leitura sob demanda) e como prompts (slash/commands no Cowork e Codex).
|
|
5
|
-
* Só o `mcp-server.ts` importa isto — o CLI nunca precisa.
|
|
6
|
-
*/
|
|
7
|
-
export const SKILLS_URI_PREFIX = 'noclaf://skills/';
|
|
8
|
-
let cache = null;
|
|
9
|
-
/** Carrega o pacote de skills, memoizado (não muda enquanto o processo roda). */
|
|
10
|
-
export function loadSkills(dir) {
|
|
11
|
-
if (cache && !dir)
|
|
12
|
-
return cache;
|
|
13
|
-
const files = readSkillFiles(dir);
|
|
14
|
-
const loaded = {
|
|
15
|
-
docs: toSkillDocs(files),
|
|
16
|
-
rawByPath: new Map(files.map((f) => [f.path, f.raw])),
|
|
17
|
-
};
|
|
18
|
-
if (!dir)
|
|
19
|
-
cache = loaded;
|
|
20
|
-
return loaded;
|
|
21
|
-
}
|
|
22
|
-
/** Limpa o cache (testes / dir custom). */
|
|
23
|
-
export function clearSkillsCache() {
|
|
24
|
-
cache = null;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* Nome do resource em estilo caminho — agrupa a listagem por tipo/skill (como o
|
|
28
|
-
* conector do Figma), em vez de despejar títulos soltos. Skills e commands viram
|
|
29
|
-
* `skill/<id>` / `command/<id>`; arquivos de apoio (templates, *-PATTERN) aninham
|
|
30
|
-
* sob a skill dona (`skill/init-sdd/templates/spec`); docs soltos viram `doc/<path>`.
|
|
31
|
-
*/
|
|
32
|
-
function resourceName(doc, skillFolders) {
|
|
33
|
-
if (doc.type === 'command')
|
|
34
|
-
return `command/${doc.id}`;
|
|
35
|
-
if (doc.type === 'agent')
|
|
36
|
-
return `agent/${doc.id}`;
|
|
37
|
-
if (doc.type === 'dependency')
|
|
38
|
-
return `dependency/${doc.id}`;
|
|
39
|
-
if (doc.type === 'skill')
|
|
40
|
-
return `skill/${doc.id}`;
|
|
41
|
-
// doc: aninha sob a skill dona, se estiver dentro da pasta de uma.
|
|
42
|
-
for (const [folder, id] of skillFolders) {
|
|
43
|
-
if (doc.path.startsWith(`${folder}/`)) {
|
|
44
|
-
const sub = doc.path.slice(folder.length + 1).replace(/\.md$/i, '');
|
|
45
|
-
return `skill/${id}/${sub}`;
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
return `doc/${doc.path.replace(/\.md$/i, '')}`;
|
|
49
|
-
}
|
|
50
|
-
export function skillResourceDescriptors(docs) {
|
|
51
|
-
// Pasta (dir do SKILL.md) → id, pra aninhar os arquivos de apoio sob a skill.
|
|
52
|
-
const skillFolders = new Map();
|
|
53
|
-
for (const d of docs) {
|
|
54
|
-
if (d.type === 'skill')
|
|
55
|
-
skillFolders.set(d.path.slice(0, d.path.lastIndexOf('/')), d.id);
|
|
56
|
-
}
|
|
57
|
-
return docs
|
|
58
|
-
// `command`/`skill` já são servidos como **prompts** — não repetir como resource
|
|
59
|
-
// (senão o Cowork lista cada um duas vezes). Aqui ficam só os arquivos de apoio
|
|
60
|
-
// (templates/patterns), agents e dependencies.
|
|
61
|
-
.filter((d) => d.type !== 'command' && d.type !== 'skill')
|
|
62
|
-
.map((d) => ({
|
|
63
|
-
uri: `${SKILLS_URI_PREFIX}${d.path}`,
|
|
64
|
-
name: resourceName(d, skillFolders),
|
|
65
|
-
description: d.description || d.title,
|
|
66
|
-
mimeType: 'text/markdown',
|
|
67
|
-
}))
|
|
68
|
-
.sort((a, b) => a.name.localeCompare(b.name));
|
|
69
|
-
}
|
|
70
|
-
/** Lê um resource pela URI, a partir dos docs + os markdowns crus por path. */
|
|
71
|
-
export function readSkillResource(uri, docs, rawByPath) {
|
|
72
|
-
if (!uri.startsWith(SKILLS_URI_PREFIX))
|
|
73
|
-
throw new Error(`URI fora do pacote de skills: ${uri}`);
|
|
74
|
-
const rel = uri.slice(SKILLS_URI_PREFIX.length);
|
|
75
|
-
const doc = docs.find((d) => d.path === rel);
|
|
76
|
-
if (!doc)
|
|
77
|
-
throw new Error(`Recurso não encontrado: ${uri}`);
|
|
78
|
-
return { uri, mimeType: 'text/markdown', text: rawByPath.get(rel) ?? doc.content };
|
|
79
|
-
}
|
|
80
|
-
/** Só `command` e `skill` viram prompts (docs/agents/dependencies não). */
|
|
81
|
-
function isPromptable(type) {
|
|
82
|
-
return type === 'command' || type === 'skill';
|
|
83
|
-
}
|
|
84
|
-
export function skillPromptDescriptors(docs) {
|
|
85
|
-
return docs
|
|
86
|
-
.filter((d) => isPromptable(d.type))
|
|
87
|
-
.map((d) => ({
|
|
88
|
-
name: d.id,
|
|
89
|
-
description: `[${d.type}] ${d.description || d.title}`.slice(0, 200),
|
|
90
|
-
arguments: [
|
|
91
|
-
{
|
|
92
|
-
name: 'args',
|
|
93
|
-
description: d.frontmatter['argument-hint'] || 'Argumentos opcionais passados ao prompt.',
|
|
94
|
-
required: false,
|
|
95
|
-
},
|
|
96
|
-
],
|
|
97
|
-
}));
|
|
98
|
-
}
|
|
99
|
-
/** Monta o texto de um prompt: corpo do doc com `$ARGUMENTS` substituído. */
|
|
100
|
-
export function buildSkillPrompt(name, args, docs) {
|
|
101
|
-
const doc = docs.find((d) => d.id === name && isPromptable(d.type));
|
|
102
|
-
if (!doc)
|
|
103
|
-
throw new Error(`Prompt desconhecido: ${name}`);
|
|
104
|
-
let text = doc.content.split('$ARGUMENTS').join(args?.args ?? '');
|
|
105
|
-
// Cowork/Codex servem a skill como **prompt** — não têm o filesystem dela. Então os
|
|
106
|
-
// arquivos de apoio (`templates/*`, `*-PATTERN.md`, `STANDARDS.md`) que o corpo
|
|
107
|
-
// referencia por path relativo não existem lá. Inline-os pra a skill ficar
|
|
108
|
-
// auto-contida (no Claude Code isso não roda — lá os arquivos são nativos).
|
|
109
|
-
if (doc.type === 'skill') {
|
|
110
|
-
const folder = doc.path.slice(0, doc.path.lastIndexOf('/'));
|
|
111
|
-
const companions = docs
|
|
112
|
-
.filter((d) => d.type === 'doc' && d.path.startsWith(`${folder}/`))
|
|
113
|
-
.sort((a, b) => a.path.localeCompare(b.path));
|
|
114
|
-
if (companions.length > 0) {
|
|
115
|
-
const blocks = companions
|
|
116
|
-
.map((comp) => {
|
|
117
|
-
const rel = comp.path.slice(folder.length + 1);
|
|
118
|
-
return `\n\n---\n\n### Arquivo de apoio da skill: \`${rel}\`\n\n${comp.content.trim()}`;
|
|
119
|
-
})
|
|
120
|
-
.join('');
|
|
121
|
-
text +=
|
|
122
|
-
`\n\n<!-- Arquivos de apoio inline: o Cowork/Codex não têm o filesystem da ` +
|
|
123
|
-
`skill; use estes no lugar das referências por path relativo acima. -->${blocks}`;
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
return { description: doc.description || doc.title, text };
|
|
127
|
-
}
|
|
128
|
-
//# sourceMappingURL=skill-serve.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skill-serve.js","sourceRoot":"","sources":["../../src/lib/skill-serve.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/skills-cache.js
DELETED
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
import { existsSync, mkdirSync, rmSync, cpSync, readdirSync, readFileSync, writeFileSync, } from 'node:fs';
|
|
2
|
-
import { tmpdir } from 'node:os';
|
|
3
|
-
import { join } from 'node:path';
|
|
4
|
-
import AdmZip from 'adm-zip';
|
|
5
|
-
import { brand, env, homePath } from '../brand.js';
|
|
6
|
-
/**
|
|
7
|
-
* Skills como repo aberto (não pacote npm): o CLI baixa o zipball do GitHub pro
|
|
8
|
-
* cache local (`~/.noclaf/skills`) e lê de lá — `skillsDir()` resolve pra cá sem
|
|
9
|
-
* checkout, e `noclaf sync` atualiza o cache sem republicar o CLI.
|
|
10
|
-
*/
|
|
11
|
-
const DEFAULT_REPO = brand.skillsRepo;
|
|
12
|
-
const DEFAULT_REF = brand.skillsRef;
|
|
13
|
-
/** `owner/repo` do repo de skills. Sobrescrevível via `NOCLAF_SKILLS_REPO`. */
|
|
14
|
-
export function skillsRepo() {
|
|
15
|
-
return env('SKILLS_REPO') || DEFAULT_REPO;
|
|
16
|
-
}
|
|
17
|
-
/** Branch/tag a baixar. Sobrescrevível via `NOCLAF_SKILLS_REF`. */
|
|
18
|
-
export function skillsRef() {
|
|
19
|
-
return env('SKILLS_REF') || DEFAULT_REF;
|
|
20
|
-
}
|
|
21
|
-
/** Raiz do cache local (o conteúdo do repo: `commands/`, `skills/`, `hooks/`, …). */
|
|
22
|
-
export function skillsCacheDir() {
|
|
23
|
-
return homePath('skills');
|
|
24
|
-
}
|
|
25
|
-
const MARKER = `${brand.homeDirName}-skills.json`;
|
|
26
|
-
/** Metadados do último fetch (repo/ref/quando). `null` se o cache não existe. */
|
|
27
|
-
export function cacheMeta() {
|
|
28
|
-
const p = join(skillsCacheDir(), MARKER);
|
|
29
|
-
if (!existsSync(p))
|
|
30
|
-
return null;
|
|
31
|
-
try {
|
|
32
|
-
return JSON.parse(readFileSync(p, 'utf8'));
|
|
33
|
-
}
|
|
34
|
-
catch {
|
|
35
|
-
return null;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
/** O cache existe e parece válido (tem ao menos `skills/` ou `commands/`)? */
|
|
39
|
-
export function skillsCached() {
|
|
40
|
-
const dir = skillsCacheDir();
|
|
41
|
-
return existsSync(join(dir, 'skills')) || existsSync(join(dir, 'commands'));
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Baixa o repo de skills (zipball do GitHub) pro cache local. Sem `git` — usa
|
|
45
|
-
* `fetch` (Node 20+) + `adm-zip`. Idempotente: com `force=false` e cache presente,
|
|
46
|
-
* não toca a rede. Se o download falhar mas houver cache antigo, segue com ele.
|
|
47
|
-
*/
|
|
48
|
-
/** Timeout do download — sem isto o `fetch` pode pendurar no connect pra sempre. */
|
|
49
|
-
const DEFAULT_TIMEOUT_MS = 20_000;
|
|
50
|
-
export async function fetchSkills(opts = {}) {
|
|
51
|
-
const dir = skillsCacheDir();
|
|
52
|
-
const repo = skillsRepo();
|
|
53
|
-
const ref = skillsRef();
|
|
54
|
-
if (!opts.force && skillsCached()) {
|
|
55
|
-
return { status: 'cached', dir, repo, ref };
|
|
56
|
-
}
|
|
57
|
-
const url = `https://codeload.github.com/${repo}/zip/refs/heads/${ref}`;
|
|
58
|
-
const staging = join(tmpdir(), `${brand.name}-skills-${process.pid}-${Date.now()}`);
|
|
59
|
-
const timeoutMs = opts.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
60
|
-
const ac = new AbortController();
|
|
61
|
-
const timer = setTimeout(() => ac.abort(), timeoutMs);
|
|
62
|
-
try {
|
|
63
|
-
const res = await fetch(url, { signal: ac.signal });
|
|
64
|
-
if (!res.ok)
|
|
65
|
-
throw new Error(`HTTP ${res.status} ao baixar ${url}`);
|
|
66
|
-
const buf = Buffer.from(await res.arrayBuffer());
|
|
67
|
-
// O zipball tem um único dir raiz (`<repo>-<ref>/`); extrai e mira nele.
|
|
68
|
-
rmSync(staging, { recursive: true, force: true });
|
|
69
|
-
mkdirSync(staging, { recursive: true });
|
|
70
|
-
new AdmZip(buf).extractAllTo(staging, true);
|
|
71
|
-
const dirs = readdirSync(staging, { withFileTypes: true }).filter((e) => e.isDirectory());
|
|
72
|
-
const root = dirs.length === 1 ? join(staging, dirs[0].name) : staging;
|
|
73
|
-
// Substitui o cache pelo conteúdo baixado.
|
|
74
|
-
rmSync(dir, { recursive: true, force: true });
|
|
75
|
-
mkdirSync(dir, { recursive: true });
|
|
76
|
-
cpSync(root, dir, { recursive: true });
|
|
77
|
-
const meta = { repo, ref, fetchedAt: new Date().toISOString() };
|
|
78
|
-
writeFileSync(join(dir, MARKER), JSON.stringify(meta, null, 2) + '\n', 'utf8');
|
|
79
|
-
return { status: 'fetched', dir, repo, ref };
|
|
80
|
-
}
|
|
81
|
-
catch (err) {
|
|
82
|
-
const msg = ac.signal.aborted
|
|
83
|
-
? `timeout após ${timeoutMs}ms baixando ${url}`
|
|
84
|
-
: err.message;
|
|
85
|
-
if (skillsCached()) {
|
|
86
|
-
return { status: 'cached', dir, repo, ref, error: msg };
|
|
87
|
-
}
|
|
88
|
-
return { status: 'failed', dir, repo, ref, error: msg };
|
|
89
|
-
}
|
|
90
|
-
finally {
|
|
91
|
-
clearTimeout(timer);
|
|
92
|
-
rmSync(staging, { recursive: true, force: true });
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
/** Garante que o cache exista (baixa só se ausente). Best-effort pro runtime do MCP. */
|
|
96
|
-
export async function ensureSkillsCache() {
|
|
97
|
-
return fetchSkills({ force: false });
|
|
98
|
-
}
|
|
99
|
-
//# sourceMappingURL=skills-cache.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skills-cache.js","sourceRoot":"","sources":["../../src/lib/skills-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,SAAS,EACT,MAAM,EACN,MAAM,EACN,WAAW,EACX,YAAY,EACZ,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,MAAM,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEnD;;;;GAIG;AAEH,MAAM,YAAY,GAAG,KAAK,CAAC,UAAU,CAAC;AACtC,MAAM,WAAW,GAAG,KAAK,CAAC,SAAS,CAAC;AAEpC,+EAA+E;AAC/E,MAAM,UAAU,UAAU;IACxB,OAAO,GAAG,CAAC,aAAa,CAAC,IAAI,YAAY,CAAC;AAC5C,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,SAAS;IACvB,OAAO,GAAG,CAAC,YAAY,CAAC,IAAI,WAAW,CAAC;AAC1C,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,cAAc;IAC5B,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,cAAc,CAAC;AAQlD,iFAAiF;AACjF,MAAM,UAAU,SAAS;IACvB,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,EAAE,EAAE,MAAM,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAc,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,YAAY;IAC1B,MAAM,GAAG,GAAG,cAAc,EAAE,CAAC;IAC7B,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;AAC9E,CAAC;AAYD;;;;GAIG;AACH,oFAAoF;AACpF,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAgD,EAAE;IAElD,MAAM,GAAG,GAAG,cAAc,EAAE,CAAC;IAC7B,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAC1B,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IAExB,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,YAAY,EAAE,EAAE,CAAC;QAClC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAC9C,CAAC;IAED,MAAM,GAAG,GAAG,+BAA+B,IAAI,mBAAmB,GAAG,EAAE,CAAC;IACxE,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,WAAW,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACpF,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,kBAAkB,CAAC;IACvD,MAAM,EAAE,GAAG,IAAI,eAAe,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;IACtD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;QACpD,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC,CAAC;QACpE,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QAEjD,yEAAyE;QACzE,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClD,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAC1F,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAEvE,2CAA2C;QAC3C,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9C,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEvC,MAAM,IAAI,GAAc,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;QAC3E,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,CAAC;QAE/E,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAC/C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO;YAC3B,CAAC,CAAC,gBAAgB,SAAS,eAAe,GAAG,EAAE;YAC/C,CAAC,CAAE,GAAa,CAAC,OAAO,CAAC;QAC3B,IAAI,YAAY,EAAE,EAAE,CAAC;YACnB,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;QAC1D,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;IAC1D,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;QACpB,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;AACH,CAAC;AAED,wFAAwF;AACxF,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,OAAO,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AACvC,CAAC"}
|