@uluops/setup 0.2.0 → 0.6.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/LICENSE +21 -0
- package/README.md +109 -89
- package/assets/auto-tracker-save.mjs +142 -0
- package/assets/claude-code/agents/anxiety-reader-agent.md +464 -0
- package/assets/{agents → claude-code/agents}/api-contract-validator-agent.md +9 -228
- package/assets/{agents → claude-code/agents}/aristotle-analyst-agent.md +51 -4
- package/assets/{agents → claude-code/agents}/aristotle-explorer-agent.md +6 -2
- package/assets/{agents → claude-code/agents}/aristotle-forecaster-agent.md +15 -230
- package/assets/{agents → claude-code/agents}/aristotle-validator-agent.md +12 -252
- package/assets/{agents → claude-code/agents}/assumption-excavator-agent.md +21 -247
- package/assets/{agents → claude-code/agents}/code-auditor-agent.md +12 -255
- package/assets/{agents → claude-code/agents}/code-optimizer-agent.md +15 -236
- package/assets/{agents → claude-code/agents}/code-validator-agent.md +31 -300
- package/assets/claude-code/agents/docs-validator-agent.md +472 -0
- package/assets/{agents → claude-code/agents}/frontend-validator-agent.md +15 -258
- package/assets/{agents → claude-code/agents}/mcp-validator-agent.md +8 -252
- package/assets/{agents → claude-code/agents}/pre-implementation-architect-agent.md +8 -224
- package/assets/{agents → claude-code/agents}/prompt-engineer-agent.md +57 -290
- package/assets/{agents → claude-code/agents}/prompt-pattern-analyzer-agent.md +10 -225
- package/assets/{agents → claude-code/agents}/prompt-quality-validator-agent.md +11 -249
- package/assets/{agents → claude-code/agents}/public-interface-validator-agent.md +15 -268
- package/assets/claude-code/agents/release-readiness-agent.md +495 -0
- package/assets/{agents → claude-code/agents}/security-analyst-agent.md +236 -480
- package/assets/{agents → claude-code/agents}/test-architect-agent.md +16 -259
- package/assets/{agents → claude-code/agents}/type-safety-validator-agent.md +23 -266
- package/assets/{agents → claude-code/agents}/workflow-synthesis-agent.md +23 -226
- package/assets/claude-code/commands/agents/anxiety-reader.md +157 -0
- package/assets/{commands → claude-code/commands}/agents/api-contract.md +156 -135
- package/assets/{commands → claude-code/commands}/agents/architect.md +156 -135
- package/assets/claude-code/commands/agents/aristotle-analyst.md +157 -0
- package/assets/claude-code/commands/agents/aristotle-explorer.md +157 -0
- package/assets/claude-code/commands/agents/aristotle-forecaster.md +157 -0
- package/assets/claude-code/commands/agents/aristotle-validator.md +157 -0
- package/assets/{commands → claude-code/commands}/agents/assumption-excavator.md +49 -6
- package/assets/{commands → claude-code/commands}/agents/audit.md +156 -136
- package/assets/{commands → claude-code/commands}/agents/docs-validate.md +156 -133
- package/assets/{commands → claude-code/commands}/agents/frontend.md +156 -135
- package/assets/{commands → claude-code/commands}/agents/mcp-validate.md +156 -136
- package/assets/{commands → claude-code/commands}/agents/optimize.md +156 -133
- package/assets/{commands → claude-code/commands}/agents/pattern-analyzer.md +150 -126
- package/assets/{commands → claude-code/commands}/agents/prompt-quality.md +155 -134
- package/assets/claude-code/commands/agents/prompt-validate.md +155 -0
- package/assets/{commands → claude-code/commands}/agents/public-interface.md +156 -134
- package/assets/{commands → claude-code/commands}/agents/release.md +156 -135
- package/assets/{commands → claude-code/commands}/agents/security.md +156 -137
- package/assets/{commands → claude-code/commands}/agents/test-review.md +156 -136
- package/assets/{commands → claude-code/commands}/agents/type-safety.md +156 -135
- package/assets/{commands → claude-code/commands}/agents/validate.md +156 -134
- package/assets/claude-code/commands/agents/workflow-synthesis.md +157 -0
- package/assets/claude-code/commands/pipelines/aristotle.md +143 -0
- package/assets/claude-code/commands/pipelines/ship.md +188 -0
- package/assets/claude-code/commands/workflows/post-implementation.md +60 -0
- package/assets/claude-code/commands/workflows/pre-implementation.md +46 -0
- package/assets/claude-code/commands/workflows/prompt-audit.md +44 -0
- package/assets/codex/agents/anxiety-reader-agent.toml +462 -0
- package/assets/codex/agents/api-contract-validator-agent.toml +738 -0
- package/assets/codex/agents/aristotle-analyst-agent.toml +750 -0
- package/assets/codex/agents/aristotle-explorer-agent.toml +155 -0
- package/assets/codex/agents/aristotle-forecaster-agent.toml +449 -0
- package/assets/codex/agents/aristotle-validator-agent.toml +424 -0
- package/assets/codex/agents/assumption-excavator-agent.toml +1126 -0
- package/assets/codex/agents/code-auditor-agent.toml +815 -0
- package/assets/codex/agents/code-optimizer-agent.toml +652 -0
- package/assets/codex/agents/code-validator-agent.toml +573 -0
- package/assets/codex/agents/docs-validator-agent.toml +468 -0
- package/assets/codex/agents/frontend-validator-agent.toml +598 -0
- package/assets/codex/agents/mcp-validator-agent.toml +580 -0
- package/assets/codex/agents/pre-implementation-architect-agent.toml +817 -0
- package/assets/codex/agents/prompt-engineer-agent.toml +922 -0
- package/assets/codex/agents/prompt-pattern-analyzer-agent.toml +689 -0
- package/assets/codex/agents/prompt-quality-validator-agent.toml +777 -0
- package/assets/codex/agents/public-interface-validator-agent.toml +695 -0
- package/assets/codex/agents/release-readiness-agent.toml +491 -0
- package/assets/codex/agents/security-analyst-agent.toml +847 -0
- package/assets/codex/agents/test-architect-agent.toml +615 -0
- package/assets/codex/agents/type-safety-validator-agent.toml +686 -0
- package/assets/codex/agents/workflow-synthesis-agent.toml +631 -0
- package/assets/gemini-cli/agents/anxiety-reader-agent.md +470 -0
- package/assets/gemini-cli/agents/api-contract-validator-agent.md +747 -0
- package/assets/gemini-cli/agents/aristotle-analyst-agent.md +758 -0
- package/assets/gemini-cli/agents/aristotle-explorer-agent.md +163 -0
- package/assets/gemini-cli/agents/aristotle-forecaster-agent.md +457 -0
- package/assets/gemini-cli/agents/aristotle-validator-agent.md +432 -0
- package/assets/gemini-cli/agents/assumption-excavator-agent.md +1134 -0
- package/assets/gemini-cli/agents/code-auditor-agent.md +827 -0
- package/assets/gemini-cli/agents/code-optimizer-agent.md +661 -0
- package/assets/gemini-cli/agents/code-validator-agent.md +582 -0
- package/assets/gemini-cli/agents/docs-validator-agent.md +477 -0
- package/assets/gemini-cli/agents/frontend-validator-agent.md +610 -0
- package/assets/gemini-cli/agents/mcp-validator-agent.md +589 -0
- package/assets/gemini-cli/agents/pre-implementation-architect-agent.md +826 -0
- package/assets/gemini-cli/agents/prompt-engineer-agent.md +931 -0
- package/assets/gemini-cli/agents/prompt-pattern-analyzer-agent.md +698 -0
- package/assets/gemini-cli/agents/prompt-quality-validator-agent.md +786 -0
- package/assets/gemini-cli/agents/public-interface-validator-agent.md +707 -0
- package/assets/gemini-cli/agents/release-readiness-agent.md +500 -0
- package/assets/gemini-cli/agents/security-analyst-agent.md +859 -0
- package/assets/gemini-cli/agents/test-architect-agent.md +624 -0
- package/assets/gemini-cli/agents/type-safety-validator-agent.md +695 -0
- package/assets/gemini-cli/agents/workflow-synthesis-agent.md +639 -0
- package/assets/gemini-cli/commands/agents/anxiety-reader.toml +155 -0
- package/assets/gemini-cli/commands/agents/api-contract.toml +154 -0
- package/assets/gemini-cli/commands/agents/architect.toml +154 -0
- package/assets/gemini-cli/commands/agents/aristotle-analyst.toml +155 -0
- package/assets/gemini-cli/commands/agents/aristotle-explorer.toml +155 -0
- package/assets/gemini-cli/commands/agents/aristotle-forecaster.toml +155 -0
- package/assets/gemini-cli/commands/agents/aristotle-validator.toml +155 -0
- package/assets/gemini-cli/commands/agents/assumption-excavator.toml +155 -0
- package/assets/gemini-cli/commands/agents/audit.toml +154 -0
- package/assets/gemini-cli/commands/agents/docs-validate.toml +154 -0
- package/assets/gemini-cli/commands/agents/frontend.toml +154 -0
- package/assets/gemini-cli/commands/agents/mcp-validate.toml +154 -0
- package/assets/gemini-cli/commands/agents/optimize.toml +154 -0
- package/assets/gemini-cli/commands/agents/pattern-analyzer.toml +148 -0
- package/assets/gemini-cli/commands/agents/prompt-quality.toml +153 -0
- package/assets/gemini-cli/commands/agents/prompt-validate.toml +153 -0
- package/assets/gemini-cli/commands/agents/public-interface.toml +154 -0
- package/assets/gemini-cli/commands/agents/release.toml +154 -0
- package/assets/gemini-cli/commands/agents/security.toml +154 -0
- package/assets/gemini-cli/commands/agents/test-review.toml +154 -0
- package/assets/gemini-cli/commands/agents/type-safety.toml +154 -0
- package/assets/gemini-cli/commands/agents/validate.toml +154 -0
- package/assets/gemini-cli/commands/agents/workflow-synthesis.toml +155 -0
- package/assets/gemini-cli/commands/pipelines/aristotle.toml +139 -0
- package/assets/gemini-cli/commands/pipelines/ship.toml +184 -0
- package/assets/gemini-cli/commands/workflows/post-implementation.toml +56 -0
- package/assets/gemini-cli/commands/workflows/pre-implementation.toml +42 -0
- package/assets/gemini-cli/commands/workflows/prompt-audit.toml +40 -0
- package/assets/opencode/agents/anxiety-reader-agent.md +472 -0
- package/assets/opencode/agents/api-contract-validator-agent.md +749 -0
- package/assets/opencode/agents/aristotle-analyst-agent.md +760 -0
- package/assets/opencode/agents/aristotle-explorer-agent.md +164 -0
- package/assets/opencode/agents/aristotle-forecaster-agent.md +459 -0
- package/assets/opencode/agents/aristotle-validator-agent.md +434 -0
- package/assets/opencode/agents/assumption-excavator-agent.md +1136 -0
- package/assets/opencode/agents/code-auditor-agent.md +826 -0
- package/assets/opencode/agents/code-optimizer-agent.md +663 -0
- package/assets/opencode/agents/code-validator-agent.md +584 -0
- package/assets/opencode/agents/docs-validator-agent.md +479 -0
- package/assets/opencode/agents/frontend-validator-agent.md +609 -0
- package/assets/opencode/agents/mcp-validator-agent.md +591 -0
- package/assets/opencode/agents/pre-implementation-architect-agent.md +828 -0
- package/assets/opencode/agents/prompt-engineer-agent.md +933 -0
- package/assets/opencode/agents/prompt-pattern-analyzer-agent.md +700 -0
- package/assets/opencode/agents/prompt-quality-validator-agent.md +788 -0
- package/assets/opencode/agents/public-interface-validator-agent.md +706 -0
- package/assets/opencode/agents/release-readiness-agent.md +502 -0
- package/assets/opencode/agents/security-analyst-agent.md +858 -0
- package/assets/opencode/agents/test-architect-agent.md +626 -0
- package/assets/opencode/agents/type-safety-validator-agent.md +697 -0
- package/assets/opencode/agents/workflow-synthesis-agent.md +641 -0
- package/dist/cli.js +22 -380
- package/dist/commands/helpers.d.ts +73 -0
- package/dist/commands/helpers.js +274 -0
- package/dist/commands/setup.d.ts +13 -0
- package/dist/commands/setup.js +93 -0
- package/dist/commands/uninstall.d.ts +3 -0
- package/dist/commands/uninstall.js +126 -0
- package/dist/commands/verify.d.ts +1 -0
- package/dist/commands/verify.js +28 -0
- package/dist/harnesses/claude-code.d.ts +8 -0
- package/dist/harnesses/claude-code.js +74 -0
- package/dist/harnesses/codex.d.ts +15 -0
- package/dist/harnesses/codex.js +54 -0
- package/dist/harnesses/gemini-cli.d.ts +12 -0
- package/dist/harnesses/gemini-cli.js +80 -0
- package/dist/harnesses/index.d.ts +27 -0
- package/dist/harnesses/index.js +54 -0
- package/dist/harnesses/opencode.d.ts +14 -0
- package/dist/harnesses/opencode.js +139 -0
- package/dist/harnesses/types.d.ts +106 -0
- package/dist/harnesses/types.js +26 -0
- package/dist/lib/agent-transform.d.ts +12 -0
- package/dist/lib/agent-transform.js +129 -0
- package/dist/lib/asset-catalog.d.ts +9 -0
- package/dist/lib/asset-catalog.js +56 -0
- package/dist/lib/atomic-write.d.ts +11 -0
- package/dist/lib/atomic-write.js +28 -0
- package/dist/lib/config-merger.d.ts +9 -2
- package/dist/lib/config-merger.js +44 -7
- package/dist/lib/display.d.ts +14 -0
- package/dist/lib/display.js +66 -0
- package/dist/lib/file-ops.d.ts +11 -0
- package/dist/lib/file-ops.js +40 -4
- package/dist/lib/hash.d.ts +1 -0
- package/dist/lib/hash.js +2 -1
- package/dist/lib/health.d.ts +2 -0
- package/dist/lib/health.js +10 -0
- package/dist/lib/manifest.d.ts +51 -5
- package/dist/lib/manifest.js +146 -13
- package/dist/lib/paths.d.ts +30 -3
- package/dist/lib/paths.js +98 -12
- package/dist/lib/settings-merger.d.ts +31 -8
- package/dist/lib/settings-merger.js +87 -24
- package/dist/lib/version.d.ts +2 -0
- package/dist/lib/version.js +10 -0
- package/dist/steps/agents.d.ts +4 -1
- package/dist/steps/agents.js +48 -9
- package/dist/steps/auth.js +26 -10
- package/dist/steps/cli.d.ts +53 -0
- package/dist/steps/cli.js +90 -0
- package/dist/steps/commands.d.ts +6 -1
- package/dist/steps/commands.js +36 -9
- package/dist/steps/detect.d.ts +3 -0
- package/dist/steps/detect.js +11 -0
- package/dist/steps/mcp.d.ts +6 -2
- package/dist/steps/mcp.js +39 -22
- package/dist/steps/metrics.d.ts +26 -10
- package/dist/steps/metrics.js +108 -108
- package/dist/steps/shell.d.ts +2 -0
- package/dist/steps/shell.js +26 -9
- package/dist/steps/signup.d.ts +7 -4
- package/dist/steps/signup.js +29 -20
- package/dist/steps/verify.d.ts +2 -2
- package/dist/steps/verify.js +118 -112
- package/package.json +40 -14
- package/assets/agents/docs-validator-agent.md +0 -490
- package/assets/agents/release-readiness-agent.md +0 -482
- package/assets/commands/agents/aristotle-analyst.md +0 -115
- package/assets/commands/agents/aristotle-explorer.md +0 -92
- package/assets/commands/agents/aristotle-forecaster.md +0 -114
- package/assets/commands/agents/aristotle-validator.md +0 -114
- package/assets/commands/agents/prompt-validate.md +0 -135
- package/assets/commands/agents/workflow-synthesis.md +0 -101
- package/assets/commands/workflows/aristotle.md +0 -543
- package/assets/commands/workflows/post-implementation.md +0 -577
- package/assets/commands/workflows/pre-implementation.md +0 -670
- package/assets/commands/workflows/prompt-audit.md +0 -754
- package/assets/commands/workflows/ship.md +0 -721
- package/dist/test/auth.test.d.ts +0 -1
- package/dist/test/auth.test.js +0 -43
- package/dist/test/config-io.test.d.ts +0 -1
- package/dist/test/config-io.test.js +0 -56
- package/dist/test/config-merger.test.d.ts +0 -1
- package/dist/test/config-merger.test.js +0 -94
- package/dist/test/detect.test.d.ts +0 -1
- package/dist/test/detect.test.js +0 -25
- package/dist/test/file-ops.test.d.ts +0 -1
- package/dist/test/file-ops.test.js +0 -100
- package/dist/test/hash.test.d.ts +0 -1
- package/dist/test/hash.test.js +0 -14
- package/dist/test/manifest.test.d.ts +0 -1
- package/dist/test/manifest.test.js +0 -78
- package/dist/test/paths.test.d.ts +0 -1
- package/dist/test/paths.test.js +0 -30
- package/dist/test/settings-merger.test.d.ts +0 -1
- package/dist/test/settings-merger.test.js +0 -167
- package/dist/test/shell-profile.test.d.ts +0 -1
- package/dist/test/shell-profile.test.js +0 -40
- package/dist/test/shell.test.d.ts +0 -1
- package/dist/test/shell.test.js +0 -71
- package/dist/test/signup.test.d.ts +0 -1
- package/dist/test/signup.test.js +0 -83
package/dist/cli.js
CHANGED
|
@@ -1,393 +1,26 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { Command } from "commander";
|
|
3
3
|
import chalk from "chalk";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import { installMcp, uninstallMcp } from "./steps/mcp.js";
|
|
11
|
-
import { installAgents, uninstallAgents } from "./steps/agents.js";
|
|
12
|
-
import { installCommands, uninstallCommands } from "./steps/commands.js";
|
|
13
|
-
import { writeShellExport, removeShellExport } from "./steps/shell.js";
|
|
14
|
-
import { verify } from "./steps/verify.js";
|
|
15
|
-
import { installMetrics, uninstallMetrics } from "./steps/metrics.js";
|
|
16
|
-
import { loadManifest, saveManifest, deleteManifest, } from "./lib/manifest.js";
|
|
17
|
-
import { getClaudeHome, getAgentsDir, ASSETS_DIR } from "./lib/paths.js";
|
|
18
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
19
|
-
async function getVersion() {
|
|
20
|
-
const pkgPath = join(__dirname, "..", "package.json");
|
|
21
|
-
const pkg = JSON.parse(await readFile(pkgPath, "utf-8"));
|
|
22
|
-
return pkg.version;
|
|
23
|
-
}
|
|
24
|
-
const ok = (msg) => console.log(` ${chalk.green("✓")} ${msg}`);
|
|
25
|
-
const warn = (msg) => console.log(` ${chalk.yellow("⚠")} ${msg}`);
|
|
26
|
-
const fail = (msg) => console.log(` ${chalk.red("✗")} ${msg}`);
|
|
27
|
-
const info = (msg) => console.log(` ${msg}`);
|
|
28
|
-
async function runSetup(opts) {
|
|
29
|
-
const version = await getVersion();
|
|
30
|
-
console.log();
|
|
31
|
-
console.log(` ${chalk.dim("⟨u⟩")} ${chalk.cyan.bold("ulu")}${chalk.bold("·ops")}`);
|
|
32
|
-
console.log(` ${chalk.dim("operating intelligence as infrastructure")}`);
|
|
33
|
-
console.log();
|
|
34
|
-
console.log(` Setup v${version}`);
|
|
35
|
-
console.log();
|
|
36
|
-
if (opts.dryRun) {
|
|
37
|
-
info(chalk.dim("(dry run — no changes will be made)\n"));
|
|
38
|
-
}
|
|
39
|
-
// Detect environment
|
|
40
|
-
const env = await detect();
|
|
41
|
-
// Resolve API key — via signup or existing key
|
|
42
|
-
let apiKey;
|
|
43
|
-
let email = null;
|
|
44
|
-
try {
|
|
45
|
-
if (opts.signup) {
|
|
46
|
-
info("Create your UluOps account\n");
|
|
47
|
-
const auth = await signup();
|
|
48
|
-
apiKey = auth.apiKey;
|
|
49
|
-
email = auth.email;
|
|
50
|
-
ok(`Account created (${email})`);
|
|
51
|
-
ok(`API key generated`);
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
const auth = await resolveApiKey({
|
|
55
|
-
apiKeyFlag: opts.apiKey,
|
|
56
|
-
skipValidation: opts.skipValidation,
|
|
57
|
-
interactive: !opts.yes && !opts.apiKey && !process.env["ULUOPS_API_KEY"],
|
|
58
|
-
});
|
|
59
|
-
apiKey = auth.apiKey;
|
|
60
|
-
email = auth.email;
|
|
61
|
-
if (email) {
|
|
62
|
-
ok(`Key validated (${email})`);
|
|
63
|
-
}
|
|
64
|
-
else if (opts.skipValidation) {
|
|
65
|
-
ok("Key accepted (validation skipped)");
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
ok("Key validated");
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
catch (err) {
|
|
73
|
-
fail(err instanceof Error ? err.message : String(err));
|
|
74
|
-
process.exit(1);
|
|
75
|
-
}
|
|
76
|
-
console.log();
|
|
77
|
-
// Load existing manifest for update detection
|
|
78
|
-
const existingManifest = await loadManifest();
|
|
79
|
-
// Show update info if re-running with newer version
|
|
80
|
-
if (existingManifest && existingManifest.version !== version) {
|
|
81
|
-
info(`Updating ${chalk.dim(existingManifest.version)} → ${chalk.green(version)}`);
|
|
82
|
-
console.log();
|
|
83
|
-
}
|
|
84
|
-
else if (existingManifest) {
|
|
85
|
-
info(chalk.dim(`Already at v${version} — checking for changes`));
|
|
86
|
-
console.log();
|
|
87
|
-
}
|
|
88
|
-
// Check for conflicts on first install
|
|
89
|
-
if (!existingManifest && !opts.yes && !opts.dryRun) {
|
|
90
|
-
await checkConflicts(opts.localDefs);
|
|
91
|
-
}
|
|
92
|
-
// MCP config
|
|
93
|
-
const mcpResult = await installMcp(apiKey, opts.scope, opts.dryRun);
|
|
94
|
-
ok(`MCP config → ${mcpResult.configPath} (2 servers)`);
|
|
95
|
-
// Agents
|
|
96
|
-
const agentsResult = await installAgents(opts.localDefs, opts.dryRun, existingManifest?.agents);
|
|
97
|
-
const agentParts = [];
|
|
98
|
-
if (agentsResult.copied > 0)
|
|
99
|
-
agentParts.push(`${agentsResult.copied} copied`);
|
|
100
|
-
if (agentsResult.skipped > 0)
|
|
101
|
-
agentParts.push(`${agentsResult.skipped} unchanged`);
|
|
102
|
-
if (agentsResult.removed > 0)
|
|
103
|
-
agentParts.push(`${agentsResult.removed} removed`);
|
|
104
|
-
ok(`${agentsResult.files.length} agents → ${opts.localDefs ? "./uluops/agents/" : "~/.claude/agents/"}${agentParts.length ? ` (${agentParts.join(", ")})` : ""}`);
|
|
105
|
-
// Commands
|
|
106
|
-
const commandsResult = await installCommands(opts.localDefs, opts.dryRun, existingManifest?.commands);
|
|
107
|
-
const totalCommands = commandsResult.agentCommands + commandsResult.workflowCommands;
|
|
108
|
-
const cmdSkipped = commandsResult.skipped;
|
|
109
|
-
const cmdTotal = commandsResult.files.length;
|
|
110
|
-
const cmdParts = [];
|
|
111
|
-
if (totalCommands > 0)
|
|
112
|
-
cmdParts.push(`${totalCommands} copied`);
|
|
113
|
-
if (cmdSkipped > 0)
|
|
114
|
-
cmdParts.push(`${cmdSkipped} unchanged`);
|
|
115
|
-
if (commandsResult.removed > 0)
|
|
116
|
-
cmdParts.push(`${commandsResult.removed} removed`);
|
|
117
|
-
ok(`${cmdTotal} commands → ${opts.localDefs ? "./uluops/commands/" : "~/.claude/commands/"}${cmdParts.length ? ` (${cmdParts.join(", ")})` : ""}`);
|
|
118
|
-
// Agent metrics (SubagentStop hook for auto-capture)
|
|
119
|
-
const metricsResult = await installMetrics(opts.dryRun);
|
|
120
|
-
if (metricsResult.hookConfigured) {
|
|
121
|
-
const parts = [];
|
|
122
|
-
if (metricsResult.toolFilesCopied > 0)
|
|
123
|
-
parts.push(`${metricsResult.toolFilesCopied} files`);
|
|
124
|
-
parts.push("hook configured");
|
|
125
|
-
ok(`Agent metrics → ~/.claude/tools/agent-metrics/ (${parts.join(", ")})`);
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
warn("Agent metrics hook not configured (tool files not found)");
|
|
129
|
-
}
|
|
130
|
-
// Health check
|
|
131
|
-
if (!opts.skipValidation && !opts.dryRun) {
|
|
132
|
-
try {
|
|
133
|
-
const [trackerOk, registryOk] = await Promise.all([
|
|
134
|
-
checkEndpoint("https://api.uluops.ai/api/v1/health"),
|
|
135
|
-
checkEndpoint("https://api.uluops.ai/api/v1/registry/health"),
|
|
136
|
-
]);
|
|
137
|
-
if (trackerOk && registryOk) {
|
|
138
|
-
ok("Health check passed — both APIs reachable");
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
warn("Some APIs unreachable (MCP tools may have limited functionality)");
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
catch {
|
|
145
|
-
warn("Health check skipped (network issue)");
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
// Shell export
|
|
149
|
-
let shellModified = false;
|
|
150
|
-
if (opts.shell && env.shellProfile) {
|
|
151
|
-
await writeShellExport(env.shellProfile, apiKey, opts.dryRun);
|
|
152
|
-
ok(`ULUOPS_API_KEY added to ${env.shellProfile}`);
|
|
153
|
-
shellModified = true;
|
|
154
|
-
}
|
|
155
|
-
else if (opts.shell) {
|
|
156
|
-
warn("--shell requested but no supported shell detected ($SHELL). Skipping.");
|
|
157
|
-
}
|
|
158
|
-
// Save manifest
|
|
159
|
-
if (!opts.dryRun) {
|
|
160
|
-
await saveManifest({
|
|
161
|
-
version,
|
|
162
|
-
installedAt: new Date().toISOString(),
|
|
163
|
-
mcpScope: opts.scope,
|
|
164
|
-
mcpConfigPath: mcpResult.configPath,
|
|
165
|
-
defsScope: opts.localDefs ? "local" : "global",
|
|
166
|
-
defsPath: opts.localDefs
|
|
167
|
-
? join(process.cwd(), "uluops")
|
|
168
|
-
: getClaudeHome(),
|
|
169
|
-
shellModified,
|
|
170
|
-
agents: agentsResult.files,
|
|
171
|
-
commands: commandsResult.files,
|
|
172
|
-
metricsHookInstalled: metricsResult.hookConfigured,
|
|
173
|
-
});
|
|
174
|
-
}
|
|
175
|
-
printSetupSummary({
|
|
176
|
-
agentCount: agentsResult.files.length,
|
|
177
|
-
commandCount: cmdTotal,
|
|
178
|
-
apiKey,
|
|
179
|
-
});
|
|
180
|
-
}
|
|
181
|
-
// MCP tool count across both servers. Update when server toolsets change.
|
|
182
|
-
const TOOL_COUNT = 73;
|
|
183
|
-
const AGENT_LIST = [
|
|
184
|
-
["/agents:validate", "Code quality", "sonnet"],
|
|
185
|
-
["/agents:type-safety", "TypeScript", "sonnet"],
|
|
186
|
-
["/agents:test-review", "Test quality", "sonnet"],
|
|
187
|
-
["/agents:optimize", "Performance", "sonnet"],
|
|
188
|
-
["/agents:frontend", "React/a11y", "sonnet"],
|
|
189
|
-
["/agents:mcp-validate", "MCP compliance", "sonnet"],
|
|
190
|
-
["/agents:architect", "Design review", "sonnet"],
|
|
191
|
-
["/agents:audit", "Runtime bugs", "opus"],
|
|
192
|
-
["/agents:security", "OWASP", "sonnet"],
|
|
193
|
-
["/agents:api-contract", "API alignment", "sonnet"],
|
|
194
|
-
["/agents:release", "Publish ready", "sonnet"],
|
|
195
|
-
["/agents:public-interface", "README/exports", "sonnet"],
|
|
196
|
-
["/agents:docs-validate", "Documentation", "sonnet"],
|
|
197
|
-
["/agents:prompt-validate", "Prompt review", "sonnet"],
|
|
198
|
-
["/agents:prompt-quality", "Prompt quality", "sonnet"],
|
|
199
|
-
["/agents:pattern-analyzer", "Patterns", "sonnet"],
|
|
200
|
-
["/agents:aristotle-explorer", "Categories", "opus"],
|
|
201
|
-
["/agents:aristotle-analyst", "Four causes", "opus"],
|
|
202
|
-
["/agents:aristotle-validator", "Teleology", "opus"],
|
|
203
|
-
["/agents:aristotle-forecaster", "Potentiality", "opus"],
|
|
204
|
-
["/agents:assumption-excavator", "Assumptions", "sonnet"],
|
|
205
|
-
["/agents:workflow-synthesis", "Cross-agent synthesis", "opus"],
|
|
206
|
-
];
|
|
207
|
-
function printSetupSummary(opts) {
|
|
208
|
-
console.log();
|
|
209
|
-
console.log(` ${chalk.dim("━".repeat(46))}`);
|
|
210
|
-
console.log();
|
|
211
|
-
console.log(` ${chalk.bold("Setup complete!")} ${TOOL_COUNT} MCP tools · ${opts.agentCount} agents · ${opts.commandCount} slash commands · metrics`);
|
|
212
|
-
console.log();
|
|
213
|
-
printAgentList();
|
|
214
|
-
info("For SDK/CLI usage, add to your shell profile:");
|
|
215
|
-
info(` ${chalk.cyan(`export ULUOPS_API_KEY="${opts.apiKey}"`)}`);
|
|
216
|
-
console.log();
|
|
217
|
-
info(`Run again to update: ${chalk.cyan("npx @uluops/setup")}`);
|
|
218
|
-
console.log();
|
|
219
|
-
// Restart warning — last and prominent
|
|
220
|
-
console.log(` ${chalk.dim("━".repeat(46))}`);
|
|
221
|
-
console.log();
|
|
222
|
-
console.log(` ${chalk.yellow.bold("Restart Claude Code to load agents.")}`);
|
|
223
|
-
console.log();
|
|
224
|
-
info("After restart, verify with:");
|
|
225
|
-
info(` ${chalk.cyan("/agents:validate --help")}`);
|
|
226
|
-
console.log();
|
|
227
|
-
info("Then try:");
|
|
228
|
-
info(` ${chalk.cyan("/workflows:post-implementation .")}`);
|
|
229
|
-
console.log();
|
|
230
|
-
}
|
|
231
|
-
function printAgentList() {
|
|
232
|
-
info(chalk.bold("WORKFLOWS"));
|
|
233
|
-
info(` ${chalk.cyan("/workflows:pre-implementation")} Design review before coding`);
|
|
234
|
-
info(` ${chalk.cyan("/workflows:post-implementation")} Iterative validation loop`);
|
|
235
|
-
info(` ${chalk.cyan("/workflows:ship")} Final gate before shipping`);
|
|
236
|
-
info(` ${chalk.cyan("/workflows:prompt-audit")} Audit agent prompts`);
|
|
237
|
-
console.log();
|
|
238
|
-
info(` ${chalk.cyan("/workflows:aristotle")} Four-cause teleological analysis`);
|
|
239
|
-
console.log();
|
|
240
|
-
info(`${chalk.bold("AGENTS")} (run individually)${" ".repeat(26)}${chalk.dim("MODEL")}`);
|
|
241
|
-
for (const [cmd, desc, model] of AGENT_LIST) {
|
|
242
|
-
info(` ${chalk.cyan(cmd.padEnd(34))}${desc.padEnd(17)}${chalk.dim(model)}`);
|
|
243
|
-
}
|
|
244
|
-
console.log();
|
|
245
|
-
info(chalk.dim(` This is the starter set. Browse 135+ agents at registry.uluops.ai`));
|
|
246
|
-
console.log();
|
|
247
|
-
}
|
|
248
|
-
async function runUninstall(opts) {
|
|
249
|
-
const version = await getVersion();
|
|
250
|
-
console.log();
|
|
251
|
-
console.log(` ${chalk.dim("⟨u⟩")} ${chalk.cyan.bold("ulu")}${chalk.bold("·ops")} ${chalk.red("Uninstall")} v${version}`);
|
|
252
|
-
console.log();
|
|
253
|
-
if (opts.dryRun) {
|
|
254
|
-
info(chalk.dim("(dry run — no changes will be made)\n"));
|
|
255
|
-
}
|
|
256
|
-
const manifest = await loadManifest();
|
|
257
|
-
if (!manifest) {
|
|
258
|
-
warn("No manifest found — nothing to uninstall.");
|
|
259
|
-
return;
|
|
260
|
-
}
|
|
261
|
-
// Remove agents
|
|
262
|
-
if (!opts.dryRun) {
|
|
263
|
-
const removed = await uninstallAgents(manifest.agents, manifest.defsPath);
|
|
264
|
-
ok(`Removed ${removed} agent(s)`);
|
|
265
|
-
}
|
|
266
|
-
else {
|
|
267
|
-
ok(`Would remove ${manifest.agents.length} agent(s)`);
|
|
268
|
-
}
|
|
269
|
-
// Remove commands
|
|
270
|
-
if (!opts.dryRun) {
|
|
271
|
-
const removed = await uninstallCommands(manifest.commands, manifest.defsPath);
|
|
272
|
-
ok(`Removed ${removed} command(s)`);
|
|
273
|
-
}
|
|
274
|
-
else {
|
|
275
|
-
ok(`Would remove ${manifest.commands.length} command(s)`);
|
|
276
|
-
}
|
|
277
|
-
// Remove MCP config
|
|
278
|
-
if (!opts.dryRun) {
|
|
279
|
-
await uninstallMcp(manifest.mcpConfigPath);
|
|
280
|
-
ok(`Removed MCP servers from ${manifest.mcpConfigPath}`);
|
|
281
|
-
}
|
|
282
|
-
else {
|
|
283
|
-
ok(`Would remove MCP servers from ${manifest.mcpConfigPath}`);
|
|
284
|
-
}
|
|
285
|
-
// Remove agent metrics hook and tool files
|
|
286
|
-
if (manifest.metricsHookInstalled) {
|
|
287
|
-
if (!opts.dryRun) {
|
|
288
|
-
await uninstallMetrics(false);
|
|
289
|
-
ok("Removed agent-metrics hook and tool files");
|
|
290
|
-
}
|
|
291
|
-
else {
|
|
292
|
-
ok("Would remove agent-metrics hook and tool files");
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
// Remove shell export
|
|
296
|
-
if (manifest.shellModified) {
|
|
297
|
-
const { getShellProfile } = await import("./lib/paths.js");
|
|
298
|
-
const profile = getShellProfile();
|
|
299
|
-
if (profile && !opts.dryRun) {
|
|
300
|
-
await removeShellExport(profile.path);
|
|
301
|
-
ok(`Removed export from ${profile.path}`);
|
|
302
|
-
}
|
|
303
|
-
else if (profile) {
|
|
304
|
-
ok(`Would remove export from ${profile.path}`);
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
// Delete manifest
|
|
308
|
-
if (!opts.dryRun) {
|
|
309
|
-
await deleteManifest();
|
|
310
|
-
ok("Manifest deleted");
|
|
311
|
-
}
|
|
312
|
-
console.log();
|
|
313
|
-
info("UluOps has been removed. Restart Claude Code to complete.");
|
|
314
|
-
console.log();
|
|
315
|
-
}
|
|
316
|
-
async function runVerify() {
|
|
317
|
-
const version = await getVersion();
|
|
318
|
-
console.log();
|
|
319
|
-
console.log(` ${chalk.dim("⟨u⟩")} ${chalk.cyan.bold("ulu")}${chalk.bold("·ops")} Installation Check v${version}`);
|
|
320
|
-
console.log();
|
|
321
|
-
const result = await verify();
|
|
322
|
-
for (const check of result.checks) {
|
|
323
|
-
if (check.passed) {
|
|
324
|
-
ok(check.label);
|
|
325
|
-
}
|
|
326
|
-
else {
|
|
327
|
-
fail(`${check.label}${check.detail ? ` — ${check.detail}` : ""}`);
|
|
328
|
-
}
|
|
329
|
-
}
|
|
330
|
-
console.log();
|
|
331
|
-
if (result.ok) {
|
|
332
|
-
info(chalk.green("All checks passed."));
|
|
333
|
-
}
|
|
334
|
-
else {
|
|
335
|
-
info(chalk.red("Some checks failed. Run npx @uluops/setup to fix."));
|
|
336
|
-
}
|
|
337
|
-
console.log();
|
|
338
|
-
process.exit(result.ok ? 0 : 1);
|
|
339
|
-
}
|
|
340
|
-
async function checkConflicts(localDefs) {
|
|
341
|
-
const destDir = getAgentsDir(localDefs);
|
|
342
|
-
const srcDir = join(ASSETS_DIR, "agents");
|
|
343
|
-
let existingFiles;
|
|
344
|
-
let assetFiles;
|
|
345
|
-
try {
|
|
346
|
-
existingFiles = await readdir(destDir);
|
|
347
|
-
assetFiles = await readdir(srcDir);
|
|
348
|
-
}
|
|
349
|
-
catch {
|
|
350
|
-
return; // Directory doesn't exist yet
|
|
351
|
-
}
|
|
352
|
-
const conflicts = assetFiles.filter((f) => existingFiles.includes(f));
|
|
353
|
-
if (conflicts.length === 0)
|
|
354
|
-
return;
|
|
355
|
-
warn(`Found ${conflicts.length} existing agents that match UluOps definitions:`);
|
|
356
|
-
for (const f of conflicts.slice(0, 5)) {
|
|
357
|
-
info(` ${f}`);
|
|
358
|
-
}
|
|
359
|
-
if (conflicts.length > 5) {
|
|
360
|
-
info(` ... and ${conflicts.length - 5} more`);
|
|
361
|
-
}
|
|
362
|
-
console.log();
|
|
363
|
-
info("These will be overwritten.");
|
|
364
|
-
console.log();
|
|
365
|
-
const { confirm } = await import("@inquirer/prompts");
|
|
366
|
-
const proceed = await confirm({ message: "Continue?", default: true });
|
|
367
|
-
if (!proceed) {
|
|
368
|
-
process.exit(0);
|
|
369
|
-
}
|
|
370
|
-
}
|
|
371
|
-
async function checkEndpoint(url) {
|
|
372
|
-
try {
|
|
373
|
-
const res = await fetch(url, { signal: AbortSignal.timeout(5000) });
|
|
374
|
-
return res.ok;
|
|
375
|
-
}
|
|
376
|
-
catch {
|
|
377
|
-
return false;
|
|
378
|
-
}
|
|
379
|
-
}
|
|
4
|
+
import { info, printAgentList } from "./lib/display.js";
|
|
5
|
+
import { getVersion } from "./lib/version.js";
|
|
6
|
+
import { resolveHarnessName, listHarnesses, HarnessNotTestedError, } from "./harnesses/index.js";
|
|
7
|
+
import { runSetup } from "./commands/setup.js";
|
|
8
|
+
import { runUninstall } from "./commands/uninstall.js";
|
|
9
|
+
import { runVerify } from "./commands/verify.js";
|
|
380
10
|
async function main() {
|
|
381
11
|
const version = await getVersion();
|
|
382
12
|
const program = new Command()
|
|
383
13
|
.name("uluops-setup")
|
|
384
|
-
.description("Zero-friction installer for UluOps
|
|
14
|
+
.description("Zero-friction installer for UluOps agentic harnesses")
|
|
385
15
|
.version(version)
|
|
386
16
|
.option("--api-key <key>", "API key (skip prompt)")
|
|
387
17
|
.option("--signup", "Create a new account (email + password, no browser)")
|
|
388
|
-
.option("--
|
|
389
|
-
.option("--
|
|
18
|
+
.option("--harness <name>", `Target harness: ${listHarnesses().join(", ")} (aliases: claude, oc, gemini)`, "claude-code")
|
|
19
|
+
.option("--scope <mode>", 'MCP connectivity scope: "global" (~/.claude.json) or "local" (.mcp.json)', "global")
|
|
20
|
+
.option("--local-defs", "Save agents/commands locally (./uluops/) for project isolation", false)
|
|
390
21
|
.option("--shell", "Write API key export to shell profile", false)
|
|
22
|
+
.option("--with-cli", "Install @uluops/cli globally without prompting")
|
|
23
|
+
.option("--no-cli", "Skip @uluops/cli install without prompting (takes precedence over --with-cli)")
|
|
391
24
|
.option("--skip-validation", "Accept API key without verifying", false)
|
|
392
25
|
.option("--list", "Show available agents and workflows without installing")
|
|
393
26
|
.option("--verify", "Check existing installation health")
|
|
@@ -400,7 +33,7 @@ async function main() {
|
|
|
400
33
|
console.log();
|
|
401
34
|
console.log(` ${chalk.dim("⟨u⟩")} ${chalk.cyan.bold("ulu")}${chalk.bold("·ops")} v${version} — available agents and workflows`);
|
|
402
35
|
console.log();
|
|
403
|
-
printAgentList();
|
|
36
|
+
await printAgentList();
|
|
404
37
|
info(`Install with: ${chalk.cyan("npx @uluops/setup")}`);
|
|
405
38
|
console.log();
|
|
406
39
|
return;
|
|
@@ -418,18 +51,27 @@ async function main() {
|
|
|
418
51
|
process.exit(1);
|
|
419
52
|
}
|
|
420
53
|
const scope = opts.scope === "local" ? "local" : "global";
|
|
54
|
+
// Resolve harness name (supports aliases)
|
|
55
|
+
const harnessName = resolveHarnessName(opts.harness);
|
|
421
56
|
await runSetup({
|
|
422
57
|
apiKey: opts.apiKey,
|
|
423
58
|
signup: opts.signup ?? false,
|
|
424
59
|
scope,
|
|
425
60
|
localDefs: opts.localDefs,
|
|
426
61
|
shell: opts.shell,
|
|
62
|
+
withCli: opts.withCli,
|
|
63
|
+
cli: opts.cli,
|
|
427
64
|
skipValidation: opts.skipValidation,
|
|
428
65
|
dryRun: opts.dryRun,
|
|
429
66
|
yes: opts.yes,
|
|
67
|
+
harness: harnessName,
|
|
430
68
|
});
|
|
431
69
|
}
|
|
432
70
|
main().catch((err) => {
|
|
71
|
+
if (err instanceof HarnessNotTestedError) {
|
|
72
|
+
console.error(chalk.yellow(`\n ${err.message}\n`));
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
433
75
|
const msg = err instanceof Error ? err.message : String(err);
|
|
434
76
|
console.error(chalk.red(`\n Error: ${msg}\n`));
|
|
435
77
|
process.exit(1);
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { detect } from "../steps/detect.js";
|
|
2
|
+
import type { McpResult } from "../steps/mcp.js";
|
|
3
|
+
import type { AgentsResult } from "../steps/agents.js";
|
|
4
|
+
import type { CommandsResult } from "../steps/commands.js";
|
|
5
|
+
import type { MetricsResult } from "../steps/metrics.js";
|
|
6
|
+
import type { CliExecutor, CliInstallResult } from "../steps/cli.js";
|
|
7
|
+
import type { HarnessProfile } from "../harnesses/index.js";
|
|
8
|
+
/** Resolve API key via flag, env, file, signup, or interactive prompt. Returns env detection + key. */
|
|
9
|
+
export declare function initContext(opts: {
|
|
10
|
+
apiKey?: string;
|
|
11
|
+
signup: boolean;
|
|
12
|
+
skipValidation: boolean;
|
|
13
|
+
yes: boolean;
|
|
14
|
+
}): Promise<{
|
|
15
|
+
env: Awaited<ReturnType<typeof detect>>;
|
|
16
|
+
apiKey: string;
|
|
17
|
+
}>;
|
|
18
|
+
/** Write MCP server entries to harness config and report warnings. */
|
|
19
|
+
export declare function configureMcpStep(profile: HarnessProfile, apiKey: string, opts: {
|
|
20
|
+
scope: "global" | "local";
|
|
21
|
+
dryRun: boolean;
|
|
22
|
+
}): Promise<McpResult>;
|
|
23
|
+
/** Copy agent definitions from assets to harness directory. */
|
|
24
|
+
export declare function installAgentsDefs(profile: HarnessProfile, opts: {
|
|
25
|
+
localDefs: boolean;
|
|
26
|
+
dryRun: boolean;
|
|
27
|
+
}, prev?: string[]): Promise<AgentsResult>;
|
|
28
|
+
/** Copy slash-command definitions from assets (Claude Code only). */
|
|
29
|
+
export declare function installCommandsDefs(profile: HarnessProfile, opts: {
|
|
30
|
+
localDefs: boolean;
|
|
31
|
+
dryRun: boolean;
|
|
32
|
+
}, prev?: string[]): Promise<CommandsResult>;
|
|
33
|
+
/** Install agent-metrics hook and tool files (Claude Code only). */
|
|
34
|
+
export declare function configureMetricsStep(profile: HarnessProfile, opts: {
|
|
35
|
+
dryRun: boolean;
|
|
36
|
+
}): Promise<MetricsResult>;
|
|
37
|
+
/**
|
|
38
|
+
* Decide whether to install `@uluops/cli` globally and do it (or not).
|
|
39
|
+
*
|
|
40
|
+
* Decision matrix:
|
|
41
|
+
* - `--no-cli` (opts.cli === false) → skip, no prompt
|
|
42
|
+
* - `--with-cli` (opts.withCli === true) → install, no prompt
|
|
43
|
+
* - Neither flag + non-interactive (--yes / --api-key / no TTY) → skip
|
|
44
|
+
* - Neither flag + interactive → prompt (default Y)
|
|
45
|
+
*
|
|
46
|
+
* Returns null when the step did not run (skipped). Returns a `CliInstallResult`
|
|
47
|
+
* when an install attempt was made, with details for the manifest.
|
|
48
|
+
*/
|
|
49
|
+
export declare function configureCliStep(opts: {
|
|
50
|
+
withCli?: boolean;
|
|
51
|
+
cli?: boolean;
|
|
52
|
+
yes: boolean;
|
|
53
|
+
apiKey?: string;
|
|
54
|
+
dryRun: boolean;
|
|
55
|
+
executor?: CliExecutor;
|
|
56
|
+
}): Promise<CliInstallResult | null>;
|
|
57
|
+
/** Ping tracker and registry health endpoints. */
|
|
58
|
+
export declare function runHealthCheck(opts: {
|
|
59
|
+
skipValidation: boolean;
|
|
60
|
+
dryRun: boolean;
|
|
61
|
+
}): Promise<void>;
|
|
62
|
+
/** Optionally write ULUOPS_API_KEY export to shell profile. */
|
|
63
|
+
export declare function configureShell(env: {
|
|
64
|
+
shellProfile: string | null;
|
|
65
|
+
}, apiKey: string, opts: {
|
|
66
|
+
shell: boolean;
|
|
67
|
+
yes: boolean;
|
|
68
|
+
dryRun: boolean;
|
|
69
|
+
}): Promise<boolean>;
|
|
70
|
+
/** Interactive y/N confirmation before writing API key to shell profile. */
|
|
71
|
+
export declare function confirmShellWrite(profilePath: string): Promise<boolean>;
|
|
72
|
+
/** Warn if existing agent files will be overwritten and prompt for confirmation. */
|
|
73
|
+
export declare function checkConflicts(profile: HarnessProfile, localDefs: boolean): Promise<void>;
|