@nio-cli/cli 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +280 -0
- package/dist/adapters/supabase/allocation-gateway.js +236 -0
- package/dist/adapters/supabase/allocation-gateway.js.map +1 -0
- package/dist/adapters/supabase/analytics-gateway.js +18 -0
- package/dist/adapters/supabase/analytics-gateway.js.map +1 -0
- package/dist/adapters/supabase/client.js +96 -0
- package/dist/adapters/supabase/client.js.map +1 -0
- package/dist/adapters/supabase/context-gateway.js +23 -0
- package/dist/adapters/supabase/context-gateway.js.map +1 -0
- package/dist/adapters/supabase/gateway.js +18 -0
- package/dist/adapters/supabase/gateway.js.map +1 -0
- package/dist/adapters/supabase/task-gateway.js +450 -0
- package/dist/adapters/supabase/task-gateway.js.map +1 -0
- package/dist/auth.js +118 -0
- package/dist/auth.js.map +1 -0
- package/dist/brand.js +91 -0
- package/dist/brand.js.map +1 -0
- package/dist/cli/commands/auth.js +128 -0
- package/dist/cli/commands/auth.js.map +1 -0
- package/dist/cli/commands/clean.js +120 -0
- package/dist/cli/commands/clean.js.map +1 -0
- package/dist/cli/commands/completion.js +114 -0
- package/dist/cli/commands/completion.js.map +1 -0
- package/dist/cli/commands/exec.js +59 -0
- package/dist/cli/commands/exec.js.map +1 -0
- package/dist/cli/commands/init/auth-step.js +49 -0
- package/dist/cli/commands/init/auth-step.js.map +1 -0
- package/dist/cli/commands/init/clients-step.js +76 -0
- package/dist/cli/commands/init/clients-step.js.map +1 -0
- package/dist/cli/commands/init/context-step.js +71 -0
- package/dist/cli/commands/init/context-step.js.map +1 -0
- package/dist/cli/commands/init/index.js +76 -0
- package/dist/cli/commands/init/index.js.map +1 -0
- package/dist/cli/commands/init/project-step.js +105 -0
- package/dist/cli/commands/init/project-step.js.map +1 -0
- package/dist/cli/commands/init/provision-step.js +103 -0
- package/dist/cli/commands/init/provision-step.js.map +1 -0
- package/dist/cli/commands/plan.js +45 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/skills.js +23 -0
- package/dist/cli/commands/skills.js.map +1 -0
- package/dist/cli/commands/sync.js +296 -0
- package/dist/cli/commands/sync.js.map +1 -0
- package/dist/cli/commands/validate-plan.js +42 -0
- package/dist/cli/commands/validate-plan.js.map +1 -0
- package/dist/cli/copy/auth.json +6 -0
- package/dist/cli/copy/flows.json +6 -0
- package/dist/cli/copy/init.json +19 -0
- package/dist/cli/copy/sync.json +3 -0
- package/dist/cli/copy.js +23 -0
- package/dist/cli/copy.js.map +1 -0
- package/dist/cli/flows/clients.js +130 -0
- package/dist/cli/flows/clients.js.map +1 -0
- package/dist/cli/flows/completion.js +63 -0
- package/dist/cli/flows/completion.js.map +1 -0
- package/dist/cli/flows/dependencies.js +114 -0
- package/dist/cli/flows/dependencies.js.map +1 -0
- package/dist/cli/flows/sections.js +85 -0
- package/dist/cli/flows/sections.js.map +1 -0
- package/dist/cli/flows/user-config.js +37 -0
- package/dist/cli/flows/user-config.js.map +1 -0
- package/dist/cli/ui/render.js +237 -0
- package/dist/cli/ui/render.js.map +1 -0
- package/dist/cli/ui/report.js +117 -0
- package/dist/cli/ui/report.js.map +1 -0
- package/dist/cli.js +36 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.js +280 -0
- package/dist/config.js.map +1 -0
- package/dist/constants.js +9 -0
- package/dist/constants.js.map +1 -0
- package/dist/core/ports.js +2 -0
- package/dist/core/ports.js.map +1 -0
- package/dist/core/types.js +7 -0
- package/dist/core/types.js.map +1 -0
- package/dist/database.types.js +11 -0
- package/dist/database.types.js.map +1 -0
- package/dist/lib/active-project.js +28 -0
- package/dist/lib/active-project.js.map +1 -0
- package/dist/lib/autopull.js +13 -0
- package/dist/lib/autopull.js.map +1 -0
- package/dist/lib/client-configs.js +191 -0
- package/dist/lib/client-configs.js.map +1 -0
- package/dist/lib/client-install.js +40 -0
- package/dist/lib/client-install.js.map +1 -0
- package/dist/lib/colors.js +93 -0
- package/dist/lib/colors.js.map +1 -0
- package/dist/lib/cowork-extension.js +143 -0
- package/dist/lib/cowork-extension.js.map +1 -0
- package/dist/lib/dependencies.js +145 -0
- package/dist/lib/dependencies.js.map +1 -0
- package/dist/lib/dependency-install.js +163 -0
- package/dist/lib/dependency-install.js.map +1 -0
- package/dist/lib/duration.js +5 -0
- package/dist/lib/duration.js.map +1 -0
- package/dist/lib/exec-delegate.js +167 -0
- package/dist/lib/exec-delegate.js.map +1 -0
- package/dist/lib/exec-engines.js +72 -0
- package/dist/lib/exec-engines.js.map +1 -0
- package/dist/lib/file-merge.js +33 -0
- package/dist/lib/file-merge.js.map +1 -0
- package/dist/lib/harness.js +90 -0
- package/dist/lib/harness.js.map +1 -0
- package/dist/lib/hooks.js +217 -0
- package/dist/lib/hooks.js.map +1 -0
- package/dist/lib/patterns.js +61 -0
- package/dist/lib/patterns.js.map +1 -0
- package/dist/lib/plan-delegate.js +106 -0
- package/dist/lib/plan-delegate.js.map +1 -0
- package/dist/lib/project-context.js +151 -0
- package/dist/lib/project-context.js.map +1 -0
- package/dist/lib/prompts.js +69 -0
- package/dist/lib/prompts.js.map +1 -0
- package/dist/lib/provision-apply.js +220 -0
- package/dist/lib/provision-apply.js.map +1 -0
- package/dist/lib/provision-collect.js +47 -0
- package/dist/lib/provision-collect.js.map +1 -0
- package/dist/lib/provision.js +45 -0
- package/dist/lib/provision.js.map +1 -0
- package/dist/lib/require-config.js +32 -0
- package/dist/lib/require-config.js.map +1 -0
- package/dist/lib/rules.js +99 -0
- package/dist/lib/rules.js.map +1 -0
- package/dist/lib/sections.js +89 -0
- package/dist/lib/sections.js.map +1 -0
- package/dist/lib/skill-serve.js +129 -0
- package/dist/lib/skill-serve.js.map +1 -0
- package/dist/lib/skills-cache.js +99 -0
- package/dist/lib/skills-cache.js.map +1 -0
- package/dist/lib/skills.js +236 -0
- package/dist/lib/skills.js.map +1 -0
- package/dist/lib/targets.js +151 -0
- package/dist/lib/targets.js.map +1 -0
- package/dist/lib/task-history.js +15 -0
- package/dist/lib/task-history.js.map +1 -0
- package/dist/lib/telemetry.js +51 -0
- package/dist/lib/telemetry.js.map +1 -0
- package/dist/lib/tool-result.js +12 -0
- package/dist/lib/tool-result.js.map +1 -0
- package/dist/lib/validate-plan-delegate.js +107 -0
- package/dist/lib/validate-plan-delegate.js.map +1 -0
- package/dist/lib/version-check.js +89 -0
- package/dist/lib/version-check.js.map +1 -0
- package/dist/matrix-logo.js +122 -0
- package/dist/matrix-logo.js.map +1 -0
- package/dist/mcp-server.js +189 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/session-factory.js +19 -0
- package/dist/session-factory.js.map +1 -0
- package/dist/spinner.js +12 -0
- package/dist/spinner.js.map +1 -0
- package/dist/tools/comment-task.js +72 -0
- package/dist/tools/comment-task.js.map +1 -0
- package/dist/tools/create-task.js +129 -0
- package/dist/tools/create-task.js.map +1 -0
- package/dist/tools/delegate-exec.js +63 -0
- package/dist/tools/delegate-exec.js.map +1 -0
- package/dist/tools/end-allocation.js +38 -0
- package/dist/tools/end-allocation.js.map +1 -0
- package/dist/tools/end-task-allocation.js +37 -0
- package/dist/tools/end-task-allocation.js.map +1 -0
- package/dist/tools/exec-status.js +43 -0
- package/dist/tools/exec-status.js.map +1 -0
- package/dist/tools/get-active-allocation.js +69 -0
- package/dist/tools/get-active-allocation.js.map +1 -0
- package/dist/tools/get-context.js +48 -0
- package/dist/tools/get-context.js.map +1 -0
- package/dist/tools/get-task.js +137 -0
- package/dist/tools/get-task.js.map +1 -0
- package/dist/tools/index.js +44 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/list-my-allocations.js +71 -0
- package/dist/tools/list-my-allocations.js.map +1 -0
- package/dist/tools/list-projects.js +38 -0
- package/dist/tools/list-projects.js.map +1 -0
- package/dist/tools/list-tasks.js +93 -0
- package/dist/tools/list-tasks.js.map +1 -0
- package/dist/tools/move-task.js +82 -0
- package/dist/tools/move-task.js.map +1 -0
- package/dist/tools/plan.js +56 -0
- package/dist/tools/plan.js.map +1 -0
- package/dist/tools/record-delivery.js +71 -0
- package/dist/tools/record-delivery.js.map +1 -0
- package/dist/tools/set-project.js +52 -0
- package/dist/tools/set-project.js.map +1 -0
- package/dist/tools/start-allocation.js +32 -0
- package/dist/tools/start-allocation.js.map +1 -0
- package/dist/tools/start-task-allocation.js +75 -0
- package/dist/tools/start-task-allocation.js.map +1 -0
- package/dist/tools/update-task.js +139 -0
- package/dist/tools/update-task.js.map +1 -0
- package/dist/tools/validate-plan.js +58 -0
- package/dist/tools/validate-plan.js.map +1 -0
- package/dist/version.js +16 -0
- package/dist/version.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { select } from "../../lib/prompts.js";
|
|
2
|
+
import { c, sym } from "../../lib/colors.js";
|
|
3
|
+
/**
|
|
4
|
+
* Captura o que `fn` imprimiria via `console.log` num array de linhas — deixa reusar os
|
|
5
|
+
* `print*` existentes como fonte do detalhe, sem reescrevê-los.
|
|
6
|
+
*/
|
|
7
|
+
export function capture(fn) {
|
|
8
|
+
const lines = [];
|
|
9
|
+
const orig = console.log;
|
|
10
|
+
console.log = (...args) => {
|
|
11
|
+
lines.push(args.map((a) => String(a)).join(" "));
|
|
12
|
+
};
|
|
13
|
+
try {
|
|
14
|
+
fn();
|
|
15
|
+
}
|
|
16
|
+
finally {
|
|
17
|
+
console.log = orig;
|
|
18
|
+
}
|
|
19
|
+
return lines;
|
|
20
|
+
}
|
|
21
|
+
export class SyncReport {
|
|
22
|
+
sections = [];
|
|
23
|
+
add(section) {
|
|
24
|
+
this.sections.push(section);
|
|
25
|
+
}
|
|
26
|
+
/** Adiciona uma seção cujo detalhe vem da saída capturada de `fn`. */
|
|
27
|
+
addCaptured(meta, fn) {
|
|
28
|
+
this.add({ ...meta, lines: capture(fn) });
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/** Resumo + status de um resultado de provisionamento (usado por sync e init). */
|
|
32
|
+
export function summarizeProvision(files) {
|
|
33
|
+
const n = (a) => files.filter((f) => f.action === a).length;
|
|
34
|
+
const werr = n("write-error");
|
|
35
|
+
const conflict = n("skip-conflict");
|
|
36
|
+
const parts = [`${n("create")} criados`, `${n("update")} atualizados`];
|
|
37
|
+
if (n("prune"))
|
|
38
|
+
parts.push(`${n("prune")} removidos`);
|
|
39
|
+
if (conflict)
|
|
40
|
+
parts.push(`${conflict} conflito`);
|
|
41
|
+
if (werr)
|
|
42
|
+
parts.push(`${werr} erro`);
|
|
43
|
+
return {
|
|
44
|
+
status: werr > 0 ? "error" : conflict > 0 ? "warn" : "ok",
|
|
45
|
+
summary: parts.join(" · "),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function icon(status) {
|
|
49
|
+
return status === "ok"
|
|
50
|
+
? c.green(sym.ok)
|
|
51
|
+
: status === "warn"
|
|
52
|
+
? c.yellow(sym.warn)
|
|
53
|
+
: c.red(sym.err);
|
|
54
|
+
}
|
|
55
|
+
function headline(s) {
|
|
56
|
+
return ` ${icon(s.status)} ${c.bold(s.title)} ${c.dim(`· ${s.summary}`)}`;
|
|
57
|
+
}
|
|
58
|
+
/** Resolve o modo: `--verbose`/`--quiet` mandam; senão TTY → resumo, não-TTY → plano. */
|
|
59
|
+
export function resolveReportMode(opts) {
|
|
60
|
+
if (opts.verbose)
|
|
61
|
+
return "verbose";
|
|
62
|
+
if (opts.quiet)
|
|
63
|
+
return "quiet";
|
|
64
|
+
return process.stdout.isTTY ? "summary" : "plain";
|
|
65
|
+
}
|
|
66
|
+
/** Imprime o report conforme o modo. */
|
|
67
|
+
export function renderReport(report, mode) {
|
|
68
|
+
if (report.sections.length === 0)
|
|
69
|
+
return;
|
|
70
|
+
console.log("");
|
|
71
|
+
if (mode === "verbose" || mode === "plain") {
|
|
72
|
+
for (const s of report.sections) {
|
|
73
|
+
console.log(headline(s));
|
|
74
|
+
for (const l of s.lines)
|
|
75
|
+
console.log(l);
|
|
76
|
+
}
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
// summary / quiet: uma linha por seção; no summary, expande as que não estão ok.
|
|
80
|
+
for (const s of report.sections) {
|
|
81
|
+
console.log(headline(s));
|
|
82
|
+
if (mode === "summary" && s.status !== "ok")
|
|
83
|
+
for (const l of s.lines)
|
|
84
|
+
console.log(l);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const DONE = "__done__";
|
|
88
|
+
/**
|
|
89
|
+
* Menu navegável pós-resumo (só TTY): o usuário escolhe uma seção pra ver o detalhe e
|
|
90
|
+
* volta ao menu; "seguir" continua o fluxo. É o "ir pro lado e ver as outras infos".
|
|
91
|
+
*/
|
|
92
|
+
export async function browseReport(report) {
|
|
93
|
+
if (!process.stdout.isTTY || report.sections.length === 0)
|
|
94
|
+
return;
|
|
95
|
+
for (;;) {
|
|
96
|
+
const choice = await select({
|
|
97
|
+
message: "Ver o detalhe de alguma seção? (↑/↓ navega, enter abre)",
|
|
98
|
+
choices: [
|
|
99
|
+
{ name: c.dim("▶ seguir"), value: DONE },
|
|
100
|
+
...report.sections.map((s) => ({
|
|
101
|
+
name: `${icon(s.status)} ${s.title} ${c.dim(`— ${s.summary}`)}`,
|
|
102
|
+
value: s.id,
|
|
103
|
+
})),
|
|
104
|
+
],
|
|
105
|
+
});
|
|
106
|
+
if (choice === DONE)
|
|
107
|
+
return;
|
|
108
|
+
const sec = report.sections.find((s) => s.id === choice);
|
|
109
|
+
if (sec) {
|
|
110
|
+
console.log("");
|
|
111
|
+
for (const l of sec.lines)
|
|
112
|
+
console.log(l);
|
|
113
|
+
console.log("");
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../../../src/cli/ui/report.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { VERSION } from "./version.js";
|
|
4
|
+
import { brand } from "./brand.js";
|
|
5
|
+
import { renderMatrixLogo } from "./matrix-logo.js";
|
|
6
|
+
import { notifyCliIfUpdate } from "./lib/version-check.js";
|
|
7
|
+
import { registerAuthCommands } from "./cli/commands/auth.js";
|
|
8
|
+
import { registerInitCommand } from "./cli/commands/init/index.js";
|
|
9
|
+
import { registerSyncCommand } from "./cli/commands/sync.js";
|
|
10
|
+
import { registerSkillsCommands } from "./cli/commands/skills.js";
|
|
11
|
+
import { registerCleanCommand } from "./cli/commands/clean.js";
|
|
12
|
+
import { registerExecCommand } from "./cli/commands/exec.js";
|
|
13
|
+
import { registerPlanCommand } from "./cli/commands/plan.js";
|
|
14
|
+
import { registerValidatePlanCommand } from "./cli/commands/validate-plan.js";
|
|
15
|
+
import { registerCompletionCommand } from "./cli/commands/completion.js";
|
|
16
|
+
notifyCliIfUpdate();
|
|
17
|
+
const program = new Command();
|
|
18
|
+
program
|
|
19
|
+
.name(brand.name)
|
|
20
|
+
.description(`CLI do ${brand.productName} (${brand.productFullName})`)
|
|
21
|
+
.version(VERSION)
|
|
22
|
+
.addHelpText("beforeAll", () => renderMatrixLogo());
|
|
23
|
+
registerAuthCommands(program);
|
|
24
|
+
registerInitCommand(program);
|
|
25
|
+
registerSyncCommand(program);
|
|
26
|
+
registerSkillsCommands(program);
|
|
27
|
+
registerCleanCommand(program);
|
|
28
|
+
registerExecCommand(program);
|
|
29
|
+
registerPlanCommand(program);
|
|
30
|
+
registerValidatePlanCommand(program);
|
|
31
|
+
registerCompletionCommand(program);
|
|
32
|
+
program.parseAsync(process.argv).catch((err) => {
|
|
33
|
+
console.error(`Erro: ${err.message}`);
|
|
34
|
+
process.exit(1);
|
|
35
|
+
});
|
|
36
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAC9E,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAEzE,iBAAiB,EAAE,CAAC;AAEpB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,OAAO;KACJ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;KAChB,WAAW,CAAC,UAAU,KAAK,CAAC,WAAW,KAAK,KAAK,CAAC,eAAe,GAAG,CAAC;KACrE,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,gBAAgB,EAAE,CAAC,CAAC;AAEtD,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,2BAA2B,CAAC,OAAO,CAAC,CAAC;AACrC,yBAAyB,CAAC,OAAO,CAAC,CAAC;AAEnC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAC7C,OAAO,CAAC,KAAK,CAAC,SAAU,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,280 @@
|
|
|
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 — `nio.json` → `nio.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ê o `ide` do `nio.user.json` em `dir`, se houver (parse tolerante). */
|
|
13
|
+
function readUserIde(dir) {
|
|
14
|
+
const path = join(dir, USER_CONFIG_FILE);
|
|
15
|
+
if (!existsSync(path))
|
|
16
|
+
return undefined;
|
|
17
|
+
try {
|
|
18
|
+
const u = JSON.parse(readFileSync(path, "utf8"));
|
|
19
|
+
if (u.ide === "vscode" || u.ide === "xcode" || u.ide === "other")
|
|
20
|
+
return u.ide;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
/* user file inválido → ignora */
|
|
24
|
+
}
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
/** Parse leniente do bloco `selection` do nio.json. */
|
|
28
|
+
function parseSelection(value) {
|
|
29
|
+
if (!value || typeof value !== 'object')
|
|
30
|
+
return undefined;
|
|
31
|
+
const s = value;
|
|
32
|
+
const roles = Array.isArray(s.roles)
|
|
33
|
+
? s.roles.filter((r) => typeof r === 'string' && r.length > 0)
|
|
34
|
+
: [];
|
|
35
|
+
const stacks = {};
|
|
36
|
+
if (s.stacks && typeof s.stacks === 'object') {
|
|
37
|
+
for (const [area, stack] of Object.entries(s.stacks)) {
|
|
38
|
+
if (typeof stack === 'string' && stack.trim())
|
|
39
|
+
stacks[area] = stack.trim();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (roles.length === 0 && Object.keys(stacks).length === 0)
|
|
43
|
+
return undefined;
|
|
44
|
+
return { roles, stacks };
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Migra o formato antigo (`sections: {profiles, fields}` + `rules: {área: stack}`) pra
|
|
48
|
+
* a `selection` unificada. `developer`→`dev`, `other`→`management`; cada field vira uma
|
|
49
|
+
* área com a stack do mapa `rules` (ou `general` se não houver). Retorna `undefined` se
|
|
50
|
+
* não há nada antigo.
|
|
51
|
+
*/
|
|
52
|
+
function migrateLegacySelection(obj) {
|
|
53
|
+
const sec = obj.sections;
|
|
54
|
+
const oldRules = (obj.rules ?? {});
|
|
55
|
+
if (!sec || typeof sec !== 'object')
|
|
56
|
+
return undefined;
|
|
57
|
+
const roles = [];
|
|
58
|
+
const profiles = Array.isArray(sec.profiles) ? sec.profiles : [];
|
|
59
|
+
if (profiles.includes('developer'))
|
|
60
|
+
roles.push(DEV_ROLE);
|
|
61
|
+
if (profiles.includes('other'))
|
|
62
|
+
roles.push('management');
|
|
63
|
+
const stacks = {};
|
|
64
|
+
const fields = Array.isArray(sec.fields) ? sec.fields : [];
|
|
65
|
+
for (const f of fields) {
|
|
66
|
+
if (typeof f !== 'string')
|
|
67
|
+
continue;
|
|
68
|
+
const stack = oldRules[f];
|
|
69
|
+
stacks[f] = typeof stack === 'string' && stack.trim() ? stack.trim() : GENERAL;
|
|
70
|
+
}
|
|
71
|
+
if (roles.length === 0 && Object.keys(stacks).length === 0)
|
|
72
|
+
return undefined;
|
|
73
|
+
return { roles, stacks };
|
|
74
|
+
}
|
|
75
|
+
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;
|
|
76
|
+
export function getProjectConfigPath(cwd = process.cwd()) {
|
|
77
|
+
return isAbsolute(cwd) ? join(cwd, PROJECT_CONFIG_FILE) : join(process.cwd(), cwd, PROJECT_CONFIG_FILE);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Acha o `nio.json` subindo de `cwd` até a raiz — assim um agente rodando numa
|
|
81
|
+
* subpasta (ex.: `proj-x/backend/src`) ainda encontra o binding em `proj-x/backend`
|
|
82
|
+
* ou `proj-x`. O mais próximo vence (binding do repo tem precedência sobre o do pai).
|
|
83
|
+
*/
|
|
84
|
+
export function findProjectConfigPath(cwd = process.cwd()) {
|
|
85
|
+
let dir = isAbsolute(cwd) ? cwd : join(process.cwd(), cwd);
|
|
86
|
+
for (;;) {
|
|
87
|
+
const candidate = join(dir, PROJECT_CONFIG_FILE);
|
|
88
|
+
if (existsSync(candidate))
|
|
89
|
+
return candidate;
|
|
90
|
+
const parent = dirname(dir);
|
|
91
|
+
if (parent === dir)
|
|
92
|
+
return null;
|
|
93
|
+
dir = parent;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* ProjectConfig a partir de NIO_PROJECT_ID / NIO_REPOSITORY_ID — override
|
|
98
|
+
* opcional pro env do cliente MCP. O Cowork NÃO usa isto (projeto é por sessão).
|
|
99
|
+
* Retorna null se NIO_PROJECT_ID não estiver definido.
|
|
100
|
+
*/
|
|
101
|
+
function loadProjectConfigFromEnv() {
|
|
102
|
+
const projectId = env('PROJECT_ID')?.trim();
|
|
103
|
+
if (!projectId)
|
|
104
|
+
return null;
|
|
105
|
+
if (!UUID_REGEX.test(projectId)) {
|
|
106
|
+
throw new Error('NIO_PROJECT_ID não é um UUID válido.');
|
|
107
|
+
}
|
|
108
|
+
const config = { project_id: projectId };
|
|
109
|
+
const repositoryId = env('REPOSITORY_ID')?.trim();
|
|
110
|
+
if (repositoryId) {
|
|
111
|
+
if (!UUID_REGEX.test(repositoryId)) {
|
|
112
|
+
throw new Error('NIO_REPOSITORY_ID deve ser um UUID válido.');
|
|
113
|
+
}
|
|
114
|
+
config.repository_id = repositoryId;
|
|
115
|
+
}
|
|
116
|
+
return config;
|
|
117
|
+
}
|
|
118
|
+
/** Lê e faz `JSON.parse` do `nio.json` em `path` — erros viram mensagens com o nome do arquivo. */
|
|
119
|
+
function readProjectConfigFile(path) {
|
|
120
|
+
let raw;
|
|
121
|
+
try {
|
|
122
|
+
raw = readFileSync(path, 'utf8');
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
throw new Error(`Não foi possível ler ${PROJECT_CONFIG_FILE}: ${err.message}`);
|
|
126
|
+
}
|
|
127
|
+
let parsed;
|
|
128
|
+
try {
|
|
129
|
+
parsed = JSON.parse(raw);
|
|
130
|
+
}
|
|
131
|
+
catch (err) {
|
|
132
|
+
throw new Error(`${PROJECT_CONFIG_FILE} contém JSON inválido: ${err.message}`);
|
|
133
|
+
}
|
|
134
|
+
if (!parsed || typeof parsed !== 'object') {
|
|
135
|
+
throw new Error(`${PROJECT_CONFIG_FILE} deve conter um objeto JSON.`);
|
|
136
|
+
}
|
|
137
|
+
return parsed;
|
|
138
|
+
}
|
|
139
|
+
/** Valida e monta o `ProjectConfig` a partir do objeto já parseado do `nio.json`. */
|
|
140
|
+
function shapeProjectConfig(obj) {
|
|
141
|
+
const projectId = obj.project_id;
|
|
142
|
+
if (typeof projectId !== 'string' || !UUID_REGEX.test(projectId)) {
|
|
143
|
+
throw new Error(`${PROJECT_CONFIG_FILE}: campo "project_id" ausente ou não é um UUID válido.`);
|
|
144
|
+
}
|
|
145
|
+
const repositoryId = obj.repository_id;
|
|
146
|
+
if (repositoryId !== undefined &&
|
|
147
|
+
repositoryId !== null &&
|
|
148
|
+
(typeof repositoryId !== 'string' || !UUID_REGEX.test(repositoryId))) {
|
|
149
|
+
throw new Error(`${PROJECT_CONFIG_FILE}: campo "repository_id" deve ser UUID, null ou ausente.`);
|
|
150
|
+
}
|
|
151
|
+
const config = { project_id: projectId };
|
|
152
|
+
if (typeof repositoryId === 'string') {
|
|
153
|
+
config.repository_id = repositoryId;
|
|
154
|
+
}
|
|
155
|
+
else if (repositoryId === null) {
|
|
156
|
+
config.repository_id = null;
|
|
157
|
+
}
|
|
158
|
+
const selection = parseSelection(obj.selection) ?? migrateLegacySelection(obj);
|
|
159
|
+
if (selection)
|
|
160
|
+
config.selection = selection;
|
|
161
|
+
if (obj.ide === 'vscode' || obj.ide === 'xcode' || obj.ide === 'other') {
|
|
162
|
+
config.ide = obj.ide;
|
|
163
|
+
}
|
|
164
|
+
return config;
|
|
165
|
+
}
|
|
166
|
+
export function loadProjectConfig(cwd = process.cwd()) {
|
|
167
|
+
// Precedência pro ambiente (Desktop Extension / Cowork não têm nio.json no cwd).
|
|
168
|
+
const envConfig = loadProjectConfigFromEnv();
|
|
169
|
+
if (envConfig)
|
|
170
|
+
return envConfig;
|
|
171
|
+
const path = findProjectConfigPath(cwd);
|
|
172
|
+
if (!path)
|
|
173
|
+
return null;
|
|
174
|
+
const config = shapeProjectConfig(readProjectConfigFile(path));
|
|
175
|
+
// Prefs do usuário (`nio.user.json`, ao lado do repo file) sobrepõem o `ide`.
|
|
176
|
+
const userIde = readUserIde(dirname(path));
|
|
177
|
+
if (userIde)
|
|
178
|
+
config.ide = userIde;
|
|
179
|
+
return config;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Grava o `nio.json` **do repo** (versionado): binding + seleção. **Não** grava `ide`
|
|
183
|
+
* (isso é do usuário → `writeUserConfig`).
|
|
184
|
+
*/
|
|
185
|
+
export function writeProjectConfig(config, cwd = process.cwd()) {
|
|
186
|
+
const repo = { project_id: config.project_id };
|
|
187
|
+
if (config.repository_id !== undefined)
|
|
188
|
+
repo.repository_id = config.repository_id;
|
|
189
|
+
if (config.selection)
|
|
190
|
+
repo.selection = config.selection;
|
|
191
|
+
writeFileSync(getProjectConfigPath(cwd), JSON.stringify(repo, null, 2) + "\n", "utf8");
|
|
192
|
+
}
|
|
193
|
+
/** Grava o `nio.user.json` (por-máquina, gitignored): ide + prefs pessoais. */
|
|
194
|
+
export function writeUserConfig(user, cwd = process.cwd()) {
|
|
195
|
+
const obj = {};
|
|
196
|
+
if (user.ide)
|
|
197
|
+
obj.ide = user.ide;
|
|
198
|
+
writeFileSync(getUserConfigPath(cwd), JSON.stringify(obj, null, 2) + "\n", "utf8");
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Migra o formato antigo monolítico: se o `nio.json` ainda tem `ide`, move pro
|
|
202
|
+
* `nio.user.json` e reescreve o `nio.json` sem ele. Idempotente. `true` se migrou.
|
|
203
|
+
*/
|
|
204
|
+
export function migrateConfigSplit(cwd = process.cwd()) {
|
|
205
|
+
const repoPath = getProjectConfigPath(cwd);
|
|
206
|
+
if (!existsSync(repoPath))
|
|
207
|
+
return false;
|
|
208
|
+
let obj;
|
|
209
|
+
try {
|
|
210
|
+
obj = JSON.parse(readFileSync(repoPath, "utf8"));
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
if (!("ide" in obj))
|
|
216
|
+
return false;
|
|
217
|
+
const ide = obj.ide;
|
|
218
|
+
delete obj.ide;
|
|
219
|
+
delete obj.sections; // resquícios do formato ainda mais antigo
|
|
220
|
+
delete obj.rules;
|
|
221
|
+
writeFileSync(repoPath, JSON.stringify(obj, null, 2) + "\n", "utf8");
|
|
222
|
+
if ((ide === "vscode" || ide === "xcode" || ide === "other") && !readUserIde(cwd)) {
|
|
223
|
+
writeUserConfig({ ide }, cwd);
|
|
224
|
+
}
|
|
225
|
+
return true;
|
|
226
|
+
}
|
|
227
|
+
function readGitignore(cwd) {
|
|
228
|
+
const path = join(cwd, ".gitignore");
|
|
229
|
+
return { path, text: existsSync(path) ? readFileSync(path, "utf8") : "" };
|
|
230
|
+
}
|
|
231
|
+
// Sufixos ESTÁVEIS dos marcadores do `.gitignore`. O prefixo é a marca (`# nio`),
|
|
232
|
+
// que muda num rebrand — então casamos por sufixo pra reconhecer/limpar o marcador de
|
|
233
|
+
// QUALQUER marca (é a migração que remove o marcador antigo).
|
|
234
|
+
const GITIGNORE_USER_SUFFIX = "(config local do usuário)";
|
|
235
|
+
const GITIGNORE_PROJECT_SUFFIX = "(binding local do projeto)";
|
|
236
|
+
/** Linha é um marcador nosso do sufixo dado? Agnóstico à marca. */
|
|
237
|
+
function isGitignoreMarker(line, suffix) {
|
|
238
|
+
const t = line.trim();
|
|
239
|
+
return t.startsWith("#") && t.endsWith(suffix);
|
|
240
|
+
}
|
|
241
|
+
/** Garante uma entrada no `.gitignore` (idempotente). Cria o arquivo se não existir. */
|
|
242
|
+
export function ensureGitignored(entry = USER_CONFIG_FILE, cwd = process.cwd()) {
|
|
243
|
+
const { path, text } = readGitignore(cwd);
|
|
244
|
+
const marker = `# ${brand.name} ${GITIGNORE_USER_SUFFIX}`;
|
|
245
|
+
// Migração: varre marcadores de usuário de outra marca (preserva o atual).
|
|
246
|
+
const kept = text
|
|
247
|
+
.split(/\r?\n/)
|
|
248
|
+
.filter((l) => l.trim() === marker || !isGitignoreMarker(l, GITIGNORE_USER_SUFFIX));
|
|
249
|
+
const base = kept.join("\n");
|
|
250
|
+
if (kept.some((l) => l.trim() === entry)) {
|
|
251
|
+
if (base !== text)
|
|
252
|
+
writeFileSync(path, base, "utf8"); // persiste a limpeza
|
|
253
|
+
return "present";
|
|
254
|
+
}
|
|
255
|
+
const sep = base.length > 0 && !base.endsWith("\n") ? "\n" : "";
|
|
256
|
+
const block = `${sep}${base.length > 0 ? "\n" : ""}${marker}\n${entry}\n`;
|
|
257
|
+
writeFileSync(path, base + block, "utf8");
|
|
258
|
+
return "added";
|
|
259
|
+
}
|
|
260
|
+
/** Remove uma entrada exata do `.gitignore` (+ o marcador de projeto órfão, de qualquer marca). `true` se removeu. */
|
|
261
|
+
export function removeFromGitignore(entry, cwd = process.cwd()) {
|
|
262
|
+
const { path, text } = readGitignore(cwd);
|
|
263
|
+
if (!text)
|
|
264
|
+
return false;
|
|
265
|
+
const lines = text.split(/\r?\n/);
|
|
266
|
+
const kept = lines.filter((l) => l.trim() !== entry && !isGitignoreMarker(l, GITIGNORE_PROJECT_SUFFIX));
|
|
267
|
+
if (kept.length === lines.length)
|
|
268
|
+
return false;
|
|
269
|
+
writeFileSync(path, kept.join("\n"), "utf8");
|
|
270
|
+
return true;
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Ajusta o `.gitignore` pro split: tira o `nio.json` (agora versionado, do time) e
|
|
274
|
+
* garante o `nio.user.json` (do usuário) ignorado. Retorna se acrescentou o user file.
|
|
275
|
+
*/
|
|
276
|
+
export function fixGitignoreForSplit(cwd = process.cwd()) {
|
|
277
|
+
removeFromGitignore(PROJECT_CONFIG_FILE, cwd);
|
|
278
|
+
return ensureGitignored(USER_CONFIG_FILE, cwd);
|
|
279
|
+
}
|
|
280
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ports.js","sourceRoot":"","sources":["../../src/core/ports.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tipos de domínio — shapes que as tools falam, sem qualquer vínculo com o
|
|
3
|
+
* backend. Nenhum import de `@supabase` aqui: é o vocabulário neutro que os
|
|
4
|
+
* adaptadores (Supabase hoje, outro amanhã) precisam produzir/consumir.
|
|
5
|
+
*/
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
|
@@ -0,0 +1,11 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"database.types.js","sourceRoot":"","sources":["../src/database.types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,28 @@
|
|
|
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 (nio.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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|