archondev 2.1.2 → 2.1.4
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 +2 -2
- package/dist/{bug-COUVQ4X3.js → bug-K4V357B2.js} +1 -1
- package/dist/{chunk-XRWIU3RD.js → chunk-3NPZQOK2.js} +6 -6
- package/dist/{chunk-JDPFHHTO.js → chunk-E2M23XSZ.js} +4 -4
- package/dist/{chunk-62OWYYHV.js → chunk-KF6MFAB4.js} +4 -4
- package/dist/{chunk-XKRAXJN5.js → chunk-P666JE3G.js} +13 -4
- package/dist/{chunk-UDBFDXJI.js → chunk-QSYKKPFF.js} +2 -2
- package/dist/{chunk-UZT2L27M.js → chunk-RCW22YNI.js} +2 -2
- package/dist/{chunk-N73LAU7W.js → chunk-TEY4GCMH.js} +1 -1
- package/dist/{chunk-OY7OJKFD.js → chunk-TSSFMB6E.js} +3 -3
- package/dist/{execute-2S2UHTLN.js → execute-5ZSLSWPZ.js} +2 -2
- package/dist/index.js +72 -69
- package/dist/{init-7EWVBX6O.js → init-6EXMDCWC.js} +1 -1
- package/dist/{list-6LNHTEOA.js → list-LEFAISNL.js} +2 -2
- package/dist/{parallel-N67PD2HF.js → parallel-5WJAXTYL.js} +2 -2
- package/dist/{plan-VRAS6IYQ.js → plan-W2UXAR6E.js} +1 -1
- package/dist/{preferences-ND2AKZYW.js → preferences-ZJ4TX2RC.js} +1 -1
- package/dist/{review-3R6QXAXQ.js → review-QV4TQM2Z.js} +1 -1
- package/package.json +1 -2
package/README.md
CHANGED
|
@@ -9,10 +9,10 @@ The complete AI development system. It manages your entire development process s
|
|
|
9
9
|
|
|
10
10
|
```bash
|
|
11
11
|
# macOS/Linux:
|
|
12
|
-
npm install -g
|
|
12
|
+
npm install -g archondev && archon
|
|
13
13
|
|
|
14
14
|
# Windows PowerShell:
|
|
15
|
-
npm install -g
|
|
15
|
+
npm install -g archondev; archon
|
|
16
16
|
```
|
|
17
17
|
|
|
18
18
|
**What you get:**
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "./chunk-M4LGRTLC.js";
|
|
5
5
|
import {
|
|
6
6
|
loadAtom
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-RCW22YNI.js";
|
|
8
8
|
import {
|
|
9
9
|
transitionAtom
|
|
10
10
|
} from "./chunk-5IQKC2TD.js";
|
|
@@ -4815,7 +4815,7 @@ function createPrompt() {
|
|
|
4815
4815
|
}
|
|
4816
4816
|
async function execute(atomId, options) {
|
|
4817
4817
|
if (options.parallel && options.parallel.length > 0) {
|
|
4818
|
-
const { parallelExecute } = await import("./parallel-
|
|
4818
|
+
const { parallelExecute } = await import("./parallel-5WJAXTYL.js");
|
|
4819
4819
|
const allAtomIds = [atomId, ...options.parallel];
|
|
4820
4820
|
await parallelExecute(allAtomIds);
|
|
4821
4821
|
return;
|
|
@@ -4928,9 +4928,9 @@ Repository: ${repoUrl}`));
|
|
|
4928
4928
|
});
|
|
4929
4929
|
if (conflictReport.hasConflicts) {
|
|
4930
4930
|
console.log(chalk3.yellow(`
|
|
4931
|
-
|
|
4931
|
+
[!] ${conflictReport.conflicts.length} conflict(s) detected:`));
|
|
4932
4932
|
for (const conflict of conflictReport.conflicts) {
|
|
4933
|
-
const icon = conflict.severity === "BLOCKER" ? chalk3.red("\u2717") : chalk3.yellow("
|
|
4933
|
+
const icon = conflict.severity === "BLOCKER" ? chalk3.red("\u2717") : chalk3.yellow("[!]");
|
|
4934
4934
|
console.log(` ${icon} [${conflict.type}] ${conflict.message}`);
|
|
4935
4935
|
}
|
|
4936
4936
|
if (conflictReport.blockerCount > 0) {
|
|
@@ -5051,7 +5051,7 @@ Running quality gates for ${targetEnvName}...`));
|
|
|
5051
5051
|
if (learningResult.success && learningResult.entriesAdded > 0) {
|
|
5052
5052
|
console.log(chalk3.green("\u2713 Learning captured to progress.txt"));
|
|
5053
5053
|
} else {
|
|
5054
|
-
console.log(chalk3.yellow("
|
|
5054
|
+
console.log(chalk3.yellow("[!] No learnings captured to progress.txt"));
|
|
5055
5055
|
}
|
|
5056
5056
|
}
|
|
5057
5057
|
const agentsMdUpdater = new AgentsMdUpdater(cwd);
|
|
@@ -5059,7 +5059,7 @@ Running quality gates for ${targetEnvName}...`));
|
|
|
5059
5059
|
if (verifyLearning) {
|
|
5060
5060
|
const agentsMdCount = agentsMdResult.filesCreated.length + agentsMdResult.filesUpdated.length;
|
|
5061
5061
|
if (agentsMdCount === 0) {
|
|
5062
|
-
console.log(chalk3.yellow("
|
|
5062
|
+
console.log(chalk3.yellow("[!] No AGENTS.md updates (no reusable patterns found)"));
|
|
5063
5063
|
} else {
|
|
5064
5064
|
console.log(chalk3.green(`\u2713 Updated ${agentsMdCount} AGENTS.md file(s)`));
|
|
5065
5065
|
}
|
|
@@ -636,7 +636,7 @@ async function displayCurrentSettings(profile, usage, providers) {
|
|
|
636
636
|
console.log(` Secondary: ${formatModelDisplay(profile.pref_secondary_adversarial, defaults.secondary)}`);
|
|
637
637
|
}
|
|
638
638
|
async function changeBillingMode(currentTier) {
|
|
639
|
-
console.log(chalk.bold("\n
|
|
639
|
+
console.log(chalk.bold("\n-- Billing Mode --\n"));
|
|
640
640
|
console.log(chalk.dim("Choose how you want to pay for AI usage:\n"));
|
|
641
641
|
const byokSelected = currentTier === "BYOK";
|
|
642
642
|
const creditsSelected = currentTier === "CREDITS";
|
|
@@ -673,7 +673,7 @@ async function changeBillingMode(currentTier) {
|
|
|
673
673
|
}
|
|
674
674
|
}
|
|
675
675
|
async function setDefaultModelsMenu(profile, providers) {
|
|
676
|
-
console.log(chalk.bold("\n
|
|
676
|
+
console.log(chalk.bold("\n-- Default Models --\n"));
|
|
677
677
|
const defaults = getDefaultAdversarialModels();
|
|
678
678
|
console.log(` ${chalk.cyan("1")}) Fast Model: ${formatModelDisplay(profile.pref_fast_model, getDefaultModel("fast"))}`);
|
|
679
679
|
console.log(` ${chalk.cyan("2")}) Thinking Model: ${formatModelDisplay(profile.pref_thinking_model, getDefaultModel("thinking"))}`);
|
|
@@ -723,7 +723,7 @@ async function setDefaultModelsMenu(profile, providers) {
|
|
|
723
723
|
}
|
|
724
724
|
}
|
|
725
725
|
async function manageApiKeys() {
|
|
726
|
-
console.log(chalk.bold("\n
|
|
726
|
+
console.log(chalk.bold("\n-- API Keys --\n"));
|
|
727
727
|
const providers = await getUserProviders();
|
|
728
728
|
if (providers.length > 0) {
|
|
729
729
|
console.log(chalk.blue("Configured providers:"));
|
|
@@ -772,7 +772,7 @@ async function manageApiKeys() {
|
|
|
772
772
|
}
|
|
773
773
|
}
|
|
774
774
|
async function viewUsageDetails() {
|
|
775
|
-
console.log(chalk.bold("\n
|
|
775
|
+
console.log(chalk.bold("\n-- Usage Details --\n"));
|
|
776
776
|
const spinner = ora("Loading usage data...").start();
|
|
777
777
|
const config = await loadConfig();
|
|
778
778
|
const authToken = getAuthToken(config);
|
|
@@ -433,7 +433,7 @@ async function bugReport(title, options) {
|
|
|
433
433
|
const prompt = createPrompt();
|
|
434
434
|
const projectPath = process.cwd();
|
|
435
435
|
try {
|
|
436
|
-
console.log(chalk.blue("\
|
|
436
|
+
console.log(chalk.blue("\nBug Report: ") + chalk.bold(title));
|
|
437
437
|
console.log(chalk.dim("\u2500".repeat(40)));
|
|
438
438
|
const description = await prompt.ask(chalk.cyan("Description: "));
|
|
439
439
|
console.log(chalk.cyan("Steps to reproduce (enter each step, empty line to finish):"));
|
|
@@ -501,11 +501,11 @@ async function bugReport(title, options) {
|
|
|
501
501
|
}
|
|
502
502
|
} catch (error) {
|
|
503
503
|
console.log(chalk.yellow(`
|
|
504
|
-
|
|
504
|
+
[!] RCA generation failed: ${error instanceof Error ? error.message : "Unknown error"}`));
|
|
505
505
|
console.log(chalk.dim("Continuing without RCA..."));
|
|
506
506
|
}
|
|
507
507
|
} else {
|
|
508
|
-
console.log(chalk.yellow("\n
|
|
508
|
+
console.log(chalk.yellow("\n[!] No API key configured. Skipping RCA."));
|
|
509
509
|
console.log(chalk.dim('Set ANTHROPIC_API_KEY or use "archon keys add anthropic"'));
|
|
510
510
|
}
|
|
511
511
|
}
|
|
@@ -534,7 +534,7 @@ async function bugReport(title, options) {
|
|
|
534
534
|
console.log(chalk.green(`
|
|
535
535
|
\u2705 Atom created: ${atom.externalId}`));
|
|
536
536
|
console.log(chalk.dim(` Linked to: ${bug.id}`));
|
|
537
|
-
console.log(chalk.bold("\
|
|
537
|
+
console.log(chalk.bold("\nSummary"));
|
|
538
538
|
console.log(chalk.dim("\u2500".repeat(40)));
|
|
539
539
|
console.log(`Bug ID: ${chalk.cyan(bug.id)}`);
|
|
540
540
|
console.log(`Atom ID: ${chalk.cyan(atom.externalId)}`);
|
|
@@ -1,15 +1,24 @@
|
|
|
1
1
|
// src/cli/init.ts
|
|
2
2
|
import { readdir, readFile, writeFile, mkdir } from "fs/promises";
|
|
3
|
-
import { existsSync } from "fs";
|
|
3
|
+
import { existsSync, readFileSync } from "fs";
|
|
4
4
|
import { join, extname } from "path";
|
|
5
5
|
import { execSync } from "child_process";
|
|
6
6
|
import chalk from "chalk";
|
|
7
7
|
import ora from "ora";
|
|
8
8
|
import readline from "readline";
|
|
9
9
|
function isInitialized(cwd) {
|
|
10
|
-
const archMdPath = join(cwd, "ARCHITECTURE.md");
|
|
11
10
|
const archonDir = join(cwd, ".archon");
|
|
12
|
-
|
|
11
|
+
if (existsSync(archonDir)) return true;
|
|
12
|
+
const archMdPath = join(cwd, "ARCHITECTURE.md");
|
|
13
|
+
if (existsSync(archMdPath)) {
|
|
14
|
+
try {
|
|
15
|
+
const content = readFileSync(archMdPath, "utf-8");
|
|
16
|
+
return content.startsWith("---") && content.includes("version:") && content.includes("qualityLevel:");
|
|
17
|
+
} catch {
|
|
18
|
+
return false;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return false;
|
|
13
22
|
}
|
|
14
23
|
var LANGUAGE_EXTENSIONS = {
|
|
15
24
|
".ts": "TypeScript",
|
|
@@ -48,7 +57,7 @@ async function init(options = {}) {
|
|
|
48
57
|
const cwd = process.cwd();
|
|
49
58
|
const archMdPath = join(cwd, "ARCHITECTURE.md");
|
|
50
59
|
const archonDir = join(cwd, ".archon");
|
|
51
|
-
console.log(chalk.blue("\n
|
|
60
|
+
console.log(chalk.blue("\n[INIT] ArchonDev Initialization\n"));
|
|
52
61
|
if (existsSync(archMdPath)) {
|
|
53
62
|
const overwrite = await promptYesNo("ARCHITECTURE.md already exists. Overwrite?", false);
|
|
54
63
|
if (!overwrite) {
|
|
@@ -21,7 +21,7 @@ function formatStatus(status) {
|
|
|
21
21
|
case "completed":
|
|
22
22
|
return chalk.green("\u2713 completed");
|
|
23
23
|
case "needs_fix":
|
|
24
|
-
return chalk.red("
|
|
24
|
+
return chalk.red("[!] needs_fix");
|
|
25
25
|
default:
|
|
26
26
|
return status;
|
|
27
27
|
}
|
|
@@ -448,7 +448,7 @@ async function reviewPlan() {
|
|
|
448
448
|
console.log(` ${task.fixPlan}`);
|
|
449
449
|
}
|
|
450
450
|
if (task.architectureImpact) {
|
|
451
|
-
console.log(chalk.yellow("
|
|
451
|
+
console.log(chalk.yellow(" [!] Architecture Impact:"));
|
|
452
452
|
console.log(` ${task.architectureImpact}`);
|
|
453
453
|
}
|
|
454
454
|
console.log();
|
|
@@ -397,7 +397,7 @@ Atom saved: ${atom.externalId}`));
|
|
|
397
397
|
console.log(chalk.dim(`Next: Configure API key and run "archon plan ${atom.externalId} --continue"`));
|
|
398
398
|
return;
|
|
399
399
|
}
|
|
400
|
-
console.log(chalk.blue("\
|
|
400
|
+
console.log(chalk.blue("\nStarting adversarial planning..."));
|
|
401
401
|
console.log(chalk.dim("Architect will generate a plan, Sentinel will validate it.\n"));
|
|
402
402
|
const planner = new AdversarialPlanner({ apiKey });
|
|
403
403
|
const planResult = await planner.planAtom(atom, parseResult.schema);
|
|
@@ -487,7 +487,7 @@ function displayPlan(plan2) {
|
|
|
487
487
|
if (plan2.risks.length > 0) {
|
|
488
488
|
console.log(chalk.bold("\nRisks:"));
|
|
489
489
|
for (const risk of plan2.risks) {
|
|
490
|
-
console.log(chalk.yellow(`
|
|
490
|
+
console.log(chalk.yellow(` [!] ${risk}`));
|
|
491
491
|
}
|
|
492
492
|
}
|
|
493
493
|
console.log(chalk.bold("\nComplexity:"), plan2.estimated_complexity);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
loadAtom
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-RCW22YNI.js";
|
|
4
4
|
|
|
5
5
|
// src/cli/parallel.ts
|
|
6
6
|
import chalk from "chalk";
|
|
@@ -155,7 +155,7 @@ async function parallelExecute(atomIds) {
|
|
|
155
155
|
const completed = state.executions.filter((e) => e.status === "completed").length;
|
|
156
156
|
const failed = state.executions.filter((e) => e.status === "failed").length;
|
|
157
157
|
console.log(chalk.blue(`
|
|
158
|
-
|
|
158
|
+
Parallel execution complete:`));
|
|
159
159
|
console.log(chalk.green(` \u2713 Completed: ${completed}`));
|
|
160
160
|
if (failed > 0) {
|
|
161
161
|
console.log(chalk.red(` \u2717 Failed: ${failed}`));
|
|
@@ -171,7 +171,7 @@ async function parallelStatus() {
|
|
|
171
171
|
console.log(chalk.dim("No parallel executions found."));
|
|
172
172
|
return;
|
|
173
173
|
}
|
|
174
|
-
console.log(chalk.blue("\
|
|
174
|
+
console.log(chalk.blue("\nParallel Execution Status\n"));
|
|
175
175
|
for (const execution of state.executions) {
|
|
176
176
|
const statusIcon = execution.status === "completed" ? chalk.green("\u2713") : execution.status === "failed" ? chalk.red("\u2717") : execution.status === "running" ? chalk.yellow("\u25CF") : chalk.dim("\u25CB");
|
|
177
177
|
console.log(`${statusIcon} ${execution.atomId}`);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import {
|
|
2
2
|
execute
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-3NPZQOK2.js";
|
|
4
4
|
import "./chunk-M4LGRTLC.js";
|
|
5
|
-
import "./chunk-
|
|
5
|
+
import "./chunk-RCW22YNI.js";
|
|
6
6
|
import "./chunk-5IQKC2TD.js";
|
|
7
7
|
import "./chunk-A7QU6JC6.js";
|
|
8
8
|
import "./chunk-SMR7JQK6.js";
|
package/dist/index.js
CHANGED
|
@@ -7,13 +7,13 @@ import {
|
|
|
7
7
|
cloudLogs,
|
|
8
8
|
cloudStatus,
|
|
9
9
|
execute
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-3NPZQOK2.js";
|
|
11
11
|
import {
|
|
12
12
|
list
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-TEY4GCMH.js";
|
|
14
14
|
import {
|
|
15
15
|
bugReport
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-KF6MFAB4.js";
|
|
17
17
|
import {
|
|
18
18
|
addKey,
|
|
19
19
|
listKeys,
|
|
@@ -31,7 +31,7 @@ import {
|
|
|
31
31
|
reviewShow,
|
|
32
32
|
reviewStatus,
|
|
33
33
|
reviewUpdate
|
|
34
|
-
} from "./chunk-
|
|
34
|
+
} from "./chunk-QSYKKPFF.js";
|
|
35
35
|
import "./chunk-VKM3HAHW.js";
|
|
36
36
|
import {
|
|
37
37
|
listModels,
|
|
@@ -40,7 +40,7 @@ import {
|
|
|
40
40
|
setPreference,
|
|
41
41
|
showExecutionPreferences,
|
|
42
42
|
showPreferences
|
|
43
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-E2M23XSZ.js";
|
|
44
44
|
import {
|
|
45
45
|
login,
|
|
46
46
|
logout,
|
|
@@ -54,17 +54,17 @@ import {
|
|
|
54
54
|
import {
|
|
55
55
|
init,
|
|
56
56
|
isInitialized
|
|
57
|
-
} from "./chunk-
|
|
57
|
+
} from "./chunk-P666JE3G.js";
|
|
58
58
|
import {
|
|
59
59
|
parallelClean,
|
|
60
60
|
parallelMerge,
|
|
61
61
|
parallelStatus
|
|
62
|
-
} from "./chunk-
|
|
62
|
+
} from "./chunk-TSSFMB6E.js";
|
|
63
63
|
import {
|
|
64
64
|
listLocalAtoms,
|
|
65
65
|
loadAtom,
|
|
66
66
|
plan
|
|
67
|
-
} from "./chunk-
|
|
67
|
+
} from "./chunk-RCW22YNI.js";
|
|
68
68
|
import {
|
|
69
69
|
ArchitectAgent
|
|
70
70
|
} from "./chunk-5IQKC2TD.js";
|
|
@@ -212,7 +212,7 @@ async function show(atomId) {
|
|
|
212
212
|
console.log("");
|
|
213
213
|
console.log(chalk2.bold("Risks:"));
|
|
214
214
|
for (const risk of atom.plan.risks) {
|
|
215
|
-
console.log(chalk2.yellow(`
|
|
215
|
+
console.log(chalk2.yellow(` [!] ${risk}`));
|
|
216
216
|
}
|
|
217
217
|
}
|
|
218
218
|
console.log("");
|
|
@@ -870,15 +870,16 @@ async function runAutoCleanupCheck(cwd) {
|
|
|
870
870
|
}
|
|
871
871
|
|
|
872
872
|
// src/cli/start.ts
|
|
873
|
-
async function start() {
|
|
873
|
+
async function start(options = {}) {
|
|
874
874
|
const cwd = process.cwd();
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
875
|
+
if (!options.skipGovernanceBanner) {
|
|
876
|
+
console.log(chalk4.bold.white("\nArchonDev - AI-Powered Development Governance"));
|
|
877
|
+
console.log(chalk4.blue("\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n"));
|
|
878
|
+
}
|
|
878
879
|
const contextManager = new ContextManager();
|
|
879
880
|
const pendingAtomsData = await contextManager.getPendingAtomsData(cwd);
|
|
880
881
|
if (pendingAtomsData && pendingAtomsData.atoms.length > 0) {
|
|
881
|
-
console.log(chalk4.yellow("
|
|
882
|
+
console.log(chalk4.yellow("[!] Previous session had pending atoms:\n"));
|
|
882
883
|
for (const atomId of pendingAtomsData.atoms) {
|
|
883
884
|
console.log(chalk4.dim(` \u2022 ${atomId}`));
|
|
884
885
|
}
|
|
@@ -899,8 +900,10 @@ async function start() {
|
|
|
899
900
|
}
|
|
900
901
|
}
|
|
901
902
|
const projectState = detectProjectState(cwd);
|
|
902
|
-
|
|
903
|
-
|
|
903
|
+
if (!options.skipGovernanceBanner) {
|
|
904
|
+
const governanceStatus = await gatherGovernanceStatus(cwd);
|
|
905
|
+
displayGovernanceBanner(governanceStatus);
|
|
906
|
+
}
|
|
904
907
|
if (await shouldRunAutoCleanup(cwd)) {
|
|
905
908
|
await runAutoCleanupCheck(cwd);
|
|
906
909
|
}
|
|
@@ -1029,15 +1032,14 @@ async function gatherGovernanceStatus(cwd) {
|
|
|
1029
1032
|
return status2;
|
|
1030
1033
|
}
|
|
1031
1034
|
function displayGovernanceBanner(status2) {
|
|
1032
|
-
console.log(chalk4.
|
|
1033
|
-
console.log(chalk4.
|
|
1034
|
-
console.log(chalk4.blue("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"));
|
|
1035
|
+
console.log(chalk4.bold.white("Governance Status"));
|
|
1036
|
+
console.log(chalk4.blue("\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500"));
|
|
1035
1037
|
if (status2.hasArchitecture) {
|
|
1036
1038
|
console.log(chalk4.green(" \u2713") + ` ARCHITECTURE.md loaded (${status2.posture} posture)`);
|
|
1037
1039
|
console.log(chalk4.green(" \u2713") + ` ${status2.invariantsCount} invariants enforced`);
|
|
1038
1040
|
console.log(chalk4.green(" \u2713") + ` ${status2.protectedPathsCount} protected paths defined`);
|
|
1039
1041
|
} else {
|
|
1040
|
-
console.log(chalk4.yellow("
|
|
1042
|
+
console.log(chalk4.yellow(" [!]") + " ARCHITECTURE.md not found - run " + chalk4.cyan("archon init"));
|
|
1041
1043
|
}
|
|
1042
1044
|
console.log(chalk4.green(" \u2713") + ` ${status2.dependencyRulesCount} dependency rules active`);
|
|
1043
1045
|
if (status2.lastSessionDate) {
|
|
@@ -1047,10 +1049,10 @@ function displayGovernanceBanner(status2) {
|
|
|
1047
1049
|
console.log();
|
|
1048
1050
|
console.log(chalk4.cyan(` Pending: ${status2.pendingAtomsCount} atoms ready for execution`));
|
|
1049
1051
|
}
|
|
1050
|
-
console.log(
|
|
1052
|
+
console.log();
|
|
1051
1053
|
}
|
|
1052
1054
|
async function handleNewProject(cwd, state) {
|
|
1053
|
-
console.log(chalk4.
|
|
1055
|
+
console.log(chalk4.bold("Starting a new project? Great!\n"));
|
|
1054
1056
|
console.log(chalk4.dim("I'll ask you a few quick questions to set things up right."));
|
|
1055
1057
|
console.log(chalk4.dim("Answer as much or as little as you want \u2014 you can always refine later.\n"));
|
|
1056
1058
|
console.log(chalk4.bold("What would you like to do?\n"));
|
|
@@ -1079,7 +1081,7 @@ async function handleNewProject(cwd, state) {
|
|
|
1079
1081
|
}
|
|
1080
1082
|
}
|
|
1081
1083
|
async function runNewProjectInterview(cwd) {
|
|
1082
|
-
console.log(chalk4.blue("\n
|
|
1084
|
+
console.log(chalk4.blue("\n-- Project Interview --\n"));
|
|
1083
1085
|
console.log(chalk4.bold("Phase 1: The Vision\n"));
|
|
1084
1086
|
const projectName = await prompt("What's the project name?");
|
|
1085
1087
|
const projectDescription = await prompt("In one sentence, what does this project do?");
|
|
@@ -1110,8 +1112,8 @@ async function runNewProjectInterview(cwd) {
|
|
|
1110
1112
|
console.log(chalk4.bold("\nPhase 3: Preferences ") + chalk4.dim("(press Enter to skip)\n"));
|
|
1111
1113
|
const protectedFiles = await prompt("Any files AI should NEVER modify without asking? (comma-separated)");
|
|
1112
1114
|
const noNoPatterns = await prompt('Anything AI should NEVER do? (e.g., "no console.log")');
|
|
1113
|
-
console.log(chalk4.blue("\n
|
|
1114
|
-
const { init: init2 } = await import("./init-
|
|
1115
|
+
console.log(chalk4.blue("\n-- Generating Project Files --\n"));
|
|
1116
|
+
const { init: init2 } = await import("./init-6EXMDCWC.js");
|
|
1115
1117
|
await init2({ analyze: false, git: true });
|
|
1116
1118
|
const today = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
|
|
1117
1119
|
const progressEntry = `
|
|
@@ -1151,14 +1153,14 @@ ${noNoPatterns ? `- **Forbidden patterns:** ${noNoPatterns}` : "- No forbidden p
|
|
|
1151
1153
|
if (continueChoice) {
|
|
1152
1154
|
const description = await prompt("Describe what you want to build first");
|
|
1153
1155
|
if (description.trim()) {
|
|
1154
|
-
const { plan: plan2 } = await import("./plan-
|
|
1156
|
+
const { plan: plan2 } = await import("./plan-W2UXAR6E.js");
|
|
1155
1157
|
await plan2(description, {});
|
|
1156
1158
|
}
|
|
1157
1159
|
}
|
|
1158
1160
|
}
|
|
1159
1161
|
async function quickStart(cwd) {
|
|
1160
1162
|
console.log(chalk4.blue("\n\u2501\u2501\u2501 Quick Start \u2501\u2501\u2501\n"));
|
|
1161
|
-
const { init: init2 } = await import("./init-
|
|
1163
|
+
const { init: init2 } = await import("./init-6EXMDCWC.js");
|
|
1162
1164
|
await init2({ analyze: false, git: true });
|
|
1163
1165
|
const today = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
|
|
1164
1166
|
const progressPath = join4(cwd, "progress.txt");
|
|
@@ -1217,7 +1219,7 @@ async function handleAdaptExisting(cwd, state) {
|
|
|
1217
1219
|
}
|
|
1218
1220
|
async function analyzeAndAdapt(cwd) {
|
|
1219
1221
|
console.log(chalk4.blue("\n\u2501\u2501\u2501 Analyzing Project \u2501\u2501\u2501\n"));
|
|
1220
|
-
const { init: init2 } = await import("./init-
|
|
1222
|
+
const { init: init2 } = await import("./init-6EXMDCWC.js");
|
|
1221
1223
|
await init2({ analyze: true, git: true });
|
|
1222
1224
|
const today = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
|
|
1223
1225
|
const progressPath = join4(cwd, "progress.txt");
|
|
@@ -1244,7 +1246,7 @@ async function analyzeAndAdapt(cwd) {
|
|
|
1244
1246
|
async function codeReviewFirst(cwd) {
|
|
1245
1247
|
console.log(chalk4.blue("\n\u2501\u2501\u2501 Code Review Mode \u2501\u2501\u2501\n"));
|
|
1246
1248
|
console.log(chalk4.dim("I'll analyze your code for issues without making any changes.\n"));
|
|
1247
|
-
const { reviewInit: reviewInit2, reviewAnalyze: reviewAnalyze2, reviewRun: reviewRun2 } = await import("./review-
|
|
1249
|
+
const { reviewInit: reviewInit2, reviewAnalyze: reviewAnalyze2, reviewRun: reviewRun2 } = await import("./review-QV4TQM2Z.js");
|
|
1248
1250
|
const reviewDbPath = join4(cwd, "docs", "code-review", "review-tasks.db");
|
|
1249
1251
|
if (!existsSync4(reviewDbPath)) {
|
|
1250
1252
|
await reviewInit2();
|
|
@@ -1259,7 +1261,7 @@ async function codeReviewFirst(cwd) {
|
|
|
1259
1261
|
async function manualSetup(cwd) {
|
|
1260
1262
|
console.log(chalk4.blue("\n\u2501\u2501\u2501 Manual Setup \u2501\u2501\u2501\n"));
|
|
1261
1263
|
console.log(chalk4.dim("Creating template files. You can customize them manually.\n"));
|
|
1262
|
-
const { init: init2 } = await import("./init-
|
|
1264
|
+
const { init: init2 } = await import("./init-6EXMDCWC.js");
|
|
1263
1265
|
await init2({ analyze: false, git: true });
|
|
1264
1266
|
console.log(chalk4.bold("\nWhat to customize:\n"));
|
|
1265
1267
|
console.log(` ${chalk4.cyan("1. ARCHITECTURE.md")} \u2014 Update components to match your folders`);
|
|
@@ -1269,8 +1271,8 @@ async function manualSetup(cwd) {
|
|
|
1269
1271
|
await showMainMenu();
|
|
1270
1272
|
}
|
|
1271
1273
|
async function quickAdapt(cwd) {
|
|
1272
|
-
console.log(chalk4.blue("\n
|
|
1273
|
-
const { init: init2 } = await import("./init-
|
|
1274
|
+
console.log(chalk4.blue("\n> Using defaults \u2014 let's go!\n"));
|
|
1275
|
+
const { init: init2 } = await import("./init-6EXMDCWC.js");
|
|
1274
1276
|
await init2({ analyze: true, git: true });
|
|
1275
1277
|
const today = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
|
|
1276
1278
|
const progressPath = join4(cwd, "progress.txt");
|
|
@@ -1288,7 +1290,7 @@ async function quickAdapt(cwd) {
|
|
|
1288
1290
|
await showMainMenu();
|
|
1289
1291
|
}
|
|
1290
1292
|
async function handleContinueSession(cwd, state) {
|
|
1291
|
-
console.log(chalk4.
|
|
1293
|
+
console.log(chalk4.bold("Welcome back!\n"));
|
|
1292
1294
|
if (state.lastProgressEntry) {
|
|
1293
1295
|
console.log(chalk4.dim("Last activity:"));
|
|
1294
1296
|
console.log(chalk4.dim(" " + state.lastProgressEntry.split("\n")[0]));
|
|
@@ -1296,7 +1298,7 @@ async function handleContinueSession(cwd, state) {
|
|
|
1296
1298
|
}
|
|
1297
1299
|
const handoff = checkForHandoff(cwd);
|
|
1298
1300
|
if (handoff) {
|
|
1299
|
-
console.log(chalk4.yellow("
|
|
1301
|
+
console.log(chalk4.yellow("[HANDOFF] Found from last session:\n"));
|
|
1300
1302
|
console.log(chalk4.dim(handoff.nextSteps));
|
|
1301
1303
|
console.log();
|
|
1302
1304
|
const continueHandoff = await promptYesNo("Continue from handoff?", true);
|
|
@@ -1365,27 +1367,27 @@ async function showReviewProgress(cwd) {
|
|
|
1365
1367
|
const pending = stats.pending + stats.inReview;
|
|
1366
1368
|
const needsFix = stats.needsFix;
|
|
1367
1369
|
console.log(
|
|
1368
|
-
chalk4.blue("
|
|
1370
|
+
chalk4.blue("Review Progress:") + chalk4.dim(` ${completed}/${total} completed`) + (needsFix > 0 ? chalk4.red(` (${needsFix} need fixes)`) : "") + (pending > 0 ? chalk4.yellow(` (${pending} pending)`) : "")
|
|
1369
1371
|
);
|
|
1370
1372
|
console.log();
|
|
1371
1373
|
} catch {
|
|
1372
1374
|
}
|
|
1373
1375
|
}
|
|
1374
1376
|
async function planTask() {
|
|
1375
|
-
const { plan: plan2 } = await import("./plan-
|
|
1377
|
+
const { plan: plan2 } = await import("./plan-W2UXAR6E.js");
|
|
1376
1378
|
const description = await prompt("Describe what you want to build");
|
|
1377
1379
|
if (description.trim()) {
|
|
1378
1380
|
await plan2(description, {});
|
|
1379
1381
|
}
|
|
1380
1382
|
}
|
|
1381
1383
|
async function listAtoms() {
|
|
1382
|
-
const { list: list2 } = await import("./list-
|
|
1384
|
+
const { list: list2 } = await import("./list-LEFAISNL.js");
|
|
1383
1385
|
await list2({});
|
|
1384
1386
|
}
|
|
1385
1387
|
async function executeNext() {
|
|
1386
|
-
const { listLocalAtoms: listLocalAtoms2 } = await import("./plan-
|
|
1388
|
+
const { listLocalAtoms: listLocalAtoms2 } = await import("./plan-W2UXAR6E.js");
|
|
1387
1389
|
const { analyzeProject, getComplexityDescription, getModeDescription } = await import("./orchestration-X6LHSHBJ.js");
|
|
1388
|
-
const { loadExecutionPreferences } = await import("./preferences-
|
|
1390
|
+
const { loadExecutionPreferences } = await import("./preferences-ZJ4TX2RC.js");
|
|
1389
1391
|
const cwd = process.cwd();
|
|
1390
1392
|
const atoms = await listLocalAtoms2();
|
|
1391
1393
|
const pendingAtoms = atoms.filter((a) => a.status === "READY" || a.status === "IN_PROGRESS");
|
|
@@ -1396,7 +1398,7 @@ async function executeNext() {
|
|
|
1396
1398
|
if (pendingAtoms.length > 1) {
|
|
1397
1399
|
const analysis = analyzeProject(pendingAtoms);
|
|
1398
1400
|
const prefs = await loadExecutionPreferences(cwd);
|
|
1399
|
-
console.log(chalk4.blue("\n
|
|
1401
|
+
console.log(chalk4.blue("\n-- Project Analysis --\n"));
|
|
1400
1402
|
console.log(` ${chalk4.bold("Atoms:")} ${analysis.atomCount}`);
|
|
1401
1403
|
console.log(` ${chalk4.bold("Estimated:")} ${analysis.estimatedMinutes} minutes`);
|
|
1402
1404
|
console.log(` ${chalk4.bold("Complexity:")} ${analysis.complexity} - ${getComplexityDescription(analysis.complexity)}`);
|
|
@@ -1418,14 +1420,14 @@ async function executeNext() {
|
|
|
1418
1420
|
const atomId = await prompt("Enter atom ID to execute (or press Enter for first pending)");
|
|
1419
1421
|
const targetId = atomId.trim() || pendingAtoms[0]?.id;
|
|
1420
1422
|
if (targetId) {
|
|
1421
|
-
const { execute: execute2 } = await import("./execute-
|
|
1423
|
+
const { execute: execute2 } = await import("./execute-5ZSLSWPZ.js");
|
|
1422
1424
|
await execute2(targetId, {});
|
|
1423
1425
|
} else {
|
|
1424
1426
|
console.log(chalk4.yellow("No atom to execute."));
|
|
1425
1427
|
}
|
|
1426
1428
|
}
|
|
1427
1429
|
async function reportBug() {
|
|
1428
|
-
const { bugReport: bugReport2 } = await import("./bug-
|
|
1430
|
+
const { bugReport: bugReport2 } = await import("./bug-K4V357B2.js");
|
|
1429
1431
|
const title = await prompt("Bug title");
|
|
1430
1432
|
if (title.trim()) {
|
|
1431
1433
|
await bugReport2(title, {});
|
|
@@ -1436,7 +1438,7 @@ async function viewStatus() {
|
|
|
1436
1438
|
await status2();
|
|
1437
1439
|
}
|
|
1438
1440
|
async function settingsMenu() {
|
|
1439
|
-
const { interactiveSettings } = await import("./preferences-
|
|
1441
|
+
const { interactiveSettings } = await import("./preferences-ZJ4TX2RC.js");
|
|
1440
1442
|
await interactiveSettings();
|
|
1441
1443
|
await showMainMenu();
|
|
1442
1444
|
}
|
|
@@ -1445,7 +1447,7 @@ async function reviewCode() {
|
|
|
1445
1447
|
const reviewDbPath = join4(cwd, "docs", "code-review", "review-tasks.db");
|
|
1446
1448
|
if (!existsSync4(reviewDbPath)) {
|
|
1447
1449
|
console.log(chalk4.dim("Code review not initialized. Starting setup...\n"));
|
|
1448
|
-
const { reviewInit: reviewInit2 } = await import("./review-
|
|
1450
|
+
const { reviewInit: reviewInit2 } = await import("./review-QV4TQM2Z.js");
|
|
1449
1451
|
await reviewInit2();
|
|
1450
1452
|
console.log();
|
|
1451
1453
|
}
|
|
@@ -1460,27 +1462,27 @@ async function reviewCode() {
|
|
|
1460
1462
|
const choice = await prompt("Enter choice");
|
|
1461
1463
|
switch (choice.toLowerCase()) {
|
|
1462
1464
|
case "1": {
|
|
1463
|
-
const { reviewAnalyze: reviewAnalyze2 } = await import("./review-
|
|
1465
|
+
const { reviewAnalyze: reviewAnalyze2 } = await import("./review-QV4TQM2Z.js");
|
|
1464
1466
|
await reviewAnalyze2();
|
|
1465
1467
|
break;
|
|
1466
1468
|
}
|
|
1467
1469
|
case "2": {
|
|
1468
|
-
const { reviewStatus: reviewStatus2 } = await import("./review-
|
|
1470
|
+
const { reviewStatus: reviewStatus2 } = await import("./review-QV4TQM2Z.js");
|
|
1469
1471
|
await reviewStatus2();
|
|
1470
1472
|
break;
|
|
1471
1473
|
}
|
|
1472
1474
|
case "3": {
|
|
1473
|
-
const { reviewNext: reviewNext2 } = await import("./review-
|
|
1475
|
+
const { reviewNext: reviewNext2 } = await import("./review-QV4TQM2Z.js");
|
|
1474
1476
|
await reviewNext2();
|
|
1475
1477
|
break;
|
|
1476
1478
|
}
|
|
1477
1479
|
case "4": {
|
|
1478
|
-
const { reviewList: reviewList2 } = await import("./review-
|
|
1480
|
+
const { reviewList: reviewList2 } = await import("./review-QV4TQM2Z.js");
|
|
1479
1481
|
await reviewList2({});
|
|
1480
1482
|
break;
|
|
1481
1483
|
}
|
|
1482
1484
|
case "5": {
|
|
1483
|
-
const { reviewRun: reviewRun2 } = await import("./review-
|
|
1485
|
+
const { reviewRun: reviewRun2 } = await import("./review-QV4TQM2Z.js");
|
|
1484
1486
|
await reviewRun2({ all: true });
|
|
1485
1487
|
break;
|
|
1486
1488
|
}
|
|
@@ -1661,7 +1663,7 @@ async function showHistory(options = {}) {
|
|
|
1661
1663
|
const usage = data;
|
|
1662
1664
|
spinner.stop();
|
|
1663
1665
|
console.log();
|
|
1664
|
-
console.log(chalk5.bold("
|
|
1666
|
+
console.log(chalk5.bold("Usage History"));
|
|
1665
1667
|
console.log();
|
|
1666
1668
|
if (!usage || usage.length === 0) {
|
|
1667
1669
|
console.log(chalk5.dim(" No usage recorded yet."));
|
|
@@ -1747,7 +1749,7 @@ async function manageBudget(options = {}) {
|
|
|
1747
1749
|
}
|
|
1748
1750
|
spinner.stop();
|
|
1749
1751
|
console.log();
|
|
1750
|
-
console.log(chalk5.bold("
|
|
1752
|
+
console.log(chalk5.bold("Monthly Budget"));
|
|
1751
1753
|
console.log();
|
|
1752
1754
|
if (profile.monthly_budget_cents === null) {
|
|
1753
1755
|
console.log(` Budget: ${chalk5.dim("No limit set")}`);
|
|
@@ -2195,7 +2197,7 @@ Examples:
|
|
|
2195
2197
|
process.exit(0);
|
|
2196
2198
|
}
|
|
2197
2199
|
console.log(chalk6.yellow(`
|
|
2198
|
-
|
|
2200
|
+
[!] Found ${result.impacts.length} dependency impact(s):
|
|
2199
2201
|
`));
|
|
2200
2202
|
for (const impact of result.impacts) {
|
|
2201
2203
|
const severityColor = impact.rule.severity === "BLOCKER" ? chalk6.red : impact.rule.severity === "WARNING" ? chalk6.yellow : chalk6.blue;
|
|
@@ -2516,7 +2518,7 @@ async function a11yCheck(options) {
|
|
|
2516
2518
|
console.log(chalk7.dim("Note: Run manual testing with screen readers for full compliance.\n"));
|
|
2517
2519
|
return;
|
|
2518
2520
|
}
|
|
2519
|
-
console.log(chalk7.red(
|
|
2521
|
+
console.log(chalk7.red(`[!] ${issues.length} Accessibility Issues Found
|
|
2520
2522
|
`));
|
|
2521
2523
|
const criticalCount = issues.filter((i) => i.severity === "critical").length;
|
|
2522
2524
|
const majorCount = issues.filter((i) => i.severity === "major").length;
|
|
@@ -2544,7 +2546,7 @@ async function a11yCheck(options) {
|
|
|
2544
2546
|
}
|
|
2545
2547
|
console.log();
|
|
2546
2548
|
}
|
|
2547
|
-
console.log(chalk7.bold.yellow("\n
|
|
2549
|
+
console.log(chalk7.bold.yellow("\n[LEGAL] Notice\n"));
|
|
2548
2550
|
console.log(chalk7.dim("Websites that don't meet accessibility standards may violate:"));
|
|
2549
2551
|
console.log(chalk7.dim(" \u2022 ADA (Americans with Disabilities Act) \u2014 US"));
|
|
2550
2552
|
console.log(chalk7.dim(" \u2022 EAA (European Accessibility Act) \u2014 EU, effective June 2025"));
|
|
@@ -2673,7 +2675,7 @@ async function a11yBadge(options) {
|
|
|
2673
2675
|
async function a11yPreDeploy() {
|
|
2674
2676
|
const prompt2 = createPrompt();
|
|
2675
2677
|
try {
|
|
2676
|
-
console.log(chalk7.blue("\n
|
|
2678
|
+
console.log(chalk7.blue("\n[CHECK] Pre-Deploy Accessibility\n"));
|
|
2677
2679
|
console.log(chalk7.dim("Before deploying a live website, accessibility compliance is required.\n"));
|
|
2678
2680
|
await a11yCheck({});
|
|
2679
2681
|
const reportPath = join6(process.cwd(), ".archon/a11y-report.json");
|
|
@@ -2699,7 +2701,7 @@ async function a11yPreDeploy() {
|
|
|
2699
2701
|
await a11yCheck({});
|
|
2700
2702
|
return true;
|
|
2701
2703
|
} else if (choice === "2") {
|
|
2702
|
-
console.log(chalk7.yellow("\n
|
|
2704
|
+
console.log(chalk7.yellow("\n[!] Acknowledged. Proceeding without full accessibility compliance."));
|
|
2703
2705
|
console.log(chalk7.dim("Consider addressing these issues in a future session.\n"));
|
|
2704
2706
|
return true;
|
|
2705
2707
|
} else {
|
|
@@ -2840,7 +2842,7 @@ async function geoIdentity() {
|
|
|
2840
2842
|
console.log(chalk8.blue("\n\u{1F3AF} GEO Identity Generator\n"));
|
|
2841
2843
|
const { allowed, tier } = await checkStrongModelAccess();
|
|
2842
2844
|
if (!allowed) {
|
|
2843
|
-
console.log(chalk8.yellow(
|
|
2845
|
+
console.log(chalk8.yellow(`[!] Your tier (${tier}) uses basic models.`));
|
|
2844
2846
|
console.log(chalk8.dim("For better results, add credits or use BYOK mode.\n"));
|
|
2845
2847
|
}
|
|
2846
2848
|
console.log(chalk8.dim("Reading homepage and about page content...\n"));
|
|
@@ -3020,7 +3022,7 @@ async function geoFaq(options) {
|
|
|
3020
3022
|
const { identityPhrase, shortDescription } = config.geo;
|
|
3021
3023
|
const { allowed, tier } = await checkStrongModelAccess();
|
|
3022
3024
|
if (!allowed) {
|
|
3023
|
-
console.log(chalk8.yellow(
|
|
3025
|
+
console.log(chalk8.yellow(`[!] Your tier (${tier}) uses basic models.`));
|
|
3024
3026
|
console.log(chalk8.dim("For better results, add credits or use BYOK mode.\n"));
|
|
3025
3027
|
}
|
|
3026
3028
|
console.log(chalk8.dim("Generating FAQ content with AI...\n"));
|
|
@@ -3103,7 +3105,7 @@ async function geoAudit() {
|
|
|
3103
3105
|
console.log(chalk8.green("\u2705 Brand keyword in H1"));
|
|
3104
3106
|
} else {
|
|
3105
3107
|
result.issues.push("Brand phrase keyword not found in H1");
|
|
3106
|
-
console.log(chalk8.yellow("
|
|
3108
|
+
console.log(chalk8.yellow("[!] Brand keyword not in H1"));
|
|
3107
3109
|
}
|
|
3108
3110
|
const metaMatch = content.match(/<meta[^>]*name=["']description["'][^>]*content=["']([^"']*)["']/i);
|
|
3109
3111
|
if (metaMatch?.[1] && metaMatch[1].toLowerCase().includes(firstKeyword)) {
|
|
@@ -3111,7 +3113,7 @@ async function geoAudit() {
|
|
|
3111
3113
|
console.log(chalk8.green("\u2705 Brand keyword in meta description"));
|
|
3112
3114
|
} else {
|
|
3113
3115
|
result.issues.push("Brand phrase keyword not found in meta description");
|
|
3114
|
-
console.log(chalk8.yellow("
|
|
3116
|
+
console.log(chalk8.yellow("[!] Brand keyword not in meta description"));
|
|
3115
3117
|
}
|
|
3116
3118
|
if (content.includes("application/ld+json")) {
|
|
3117
3119
|
if (content.includes('"@type":"Organization"') || content.includes('"@type": "Organization"')) {
|
|
@@ -3119,21 +3121,21 @@ async function geoAudit() {
|
|
|
3119
3121
|
console.log(chalk8.green("\u2705 Organization schema present"));
|
|
3120
3122
|
} else {
|
|
3121
3123
|
result.issues.push("Organization schema not found");
|
|
3122
|
-
console.log(chalk8.yellow("
|
|
3124
|
+
console.log(chalk8.yellow("[!] Organization schema missing"));
|
|
3123
3125
|
}
|
|
3124
3126
|
if (content.includes('"@type":"Service"') || content.includes('"@type": "Service"')) {
|
|
3125
3127
|
result.hasServiceSchema = true;
|
|
3126
3128
|
console.log(chalk8.green("\u2705 Service schema present"));
|
|
3127
3129
|
} else {
|
|
3128
3130
|
result.issues.push("Service schema not found");
|
|
3129
|
-
console.log(chalk8.yellow("
|
|
3131
|
+
console.log(chalk8.yellow("[!] Service schema missing"));
|
|
3130
3132
|
}
|
|
3131
3133
|
if (content.includes('"@type":"FAQPage"') || content.includes('"@type": "FAQPage"')) {
|
|
3132
3134
|
result.hasFAQSchema = true;
|
|
3133
3135
|
console.log(chalk8.green("\u2705 FAQPage schema present"));
|
|
3134
3136
|
} else {
|
|
3135
3137
|
result.issues.push("FAQPage schema not found");
|
|
3136
|
-
console.log(chalk8.yellow("
|
|
3138
|
+
console.log(chalk8.yellow("[!] FAQPage schema missing"));
|
|
3137
3139
|
}
|
|
3138
3140
|
} else {
|
|
3139
3141
|
result.issues.push("No JSON-LD schemas found");
|
|
@@ -3141,14 +3143,14 @@ async function geoAudit() {
|
|
|
3141
3143
|
}
|
|
3142
3144
|
} else if (htmlFiles.length === 0) {
|
|
3143
3145
|
result.issues.push("No index.html found");
|
|
3144
|
-
console.log(chalk8.yellow("
|
|
3146
|
+
console.log(chalk8.yellow("[!] No index.html found to audit"));
|
|
3145
3147
|
}
|
|
3146
3148
|
console.log();
|
|
3147
3149
|
const passed = result.issues.length === 0;
|
|
3148
3150
|
if (passed) {
|
|
3149
3151
|
console.log(chalk8.green.bold("\u2705 GEO Audit Passed"));
|
|
3150
3152
|
} else {
|
|
3151
|
-
console.log(chalk8.yellow.bold(
|
|
3153
|
+
console.log(chalk8.yellow.bold(`[!] ${result.issues.length} issue(s) found`));
|
|
3152
3154
|
console.log();
|
|
3153
3155
|
console.log(chalk8.bold("Recommendations:"));
|
|
3154
3156
|
result.issues.forEach((issue, i) => {
|
|
@@ -3366,7 +3368,7 @@ async function seoCheck(options) {
|
|
|
3366
3368
|
console.log(chalk9.dim("All essential meta tags are present."));
|
|
3367
3369
|
return;
|
|
3368
3370
|
}
|
|
3369
|
-
console.log(chalk9.yellow(
|
|
3371
|
+
console.log(chalk9.yellow(`[!] ${issues.length} SEO Issues Found
|
|
3370
3372
|
`));
|
|
3371
3373
|
const criticalCount = issues.filter((i) => i.severity === "critical").length;
|
|
3372
3374
|
const warningCount = issues.filter((i) => i.severity === "warning").length;
|
|
@@ -4487,7 +4489,7 @@ async function indexUpdate(options) {
|
|
|
4487
4489
|
}
|
|
4488
4490
|
} catch (error) {
|
|
4489
4491
|
console.log(`
|
|
4490
|
-
${chalk12.yellow(
|
|
4492
|
+
${chalk12.yellow(`[!] Skipped ${file}: ${error instanceof Error ? error.message : "Unknown error"}`)}`);
|
|
4491
4493
|
}
|
|
4492
4494
|
}
|
|
4493
4495
|
console.log("\r" + " ".repeat(70));
|
|
@@ -4735,11 +4737,12 @@ async function githubDisconnect() {
|
|
|
4735
4737
|
var program = new Command4();
|
|
4736
4738
|
program.name("archon").description("Local-first AI-powered development governance").version("1.1.0").action(async () => {
|
|
4737
4739
|
const cwd = process.cwd();
|
|
4738
|
-
|
|
4740
|
+
const wasInitialized = isInitialized(cwd);
|
|
4741
|
+
if (!wasInitialized) {
|
|
4739
4742
|
console.log(chalk14.blue("\nArchonDev is not initialized in this folder.\n"));
|
|
4740
4743
|
await init({ analyze: true, git: true });
|
|
4741
4744
|
}
|
|
4742
|
-
await start();
|
|
4745
|
+
await start({ skipGovernanceBanner: !wasInitialized });
|
|
4743
4746
|
});
|
|
4744
4747
|
program.command("login").description("Authenticate with ArchonDev").option("-p, --provider <provider>", "OAuth provider (github or google)", "github").action(async (options) => {
|
|
4745
4748
|
const provider = options.provider;
|
|
@@ -3,8 +3,8 @@ import {
|
|
|
3
3
|
parallelExecute,
|
|
4
4
|
parallelMerge,
|
|
5
5
|
parallelStatus
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-TSSFMB6E.js";
|
|
7
|
+
import "./chunk-RCW22YNI.js";
|
|
8
8
|
import "./chunk-5IQKC2TD.js";
|
|
9
9
|
import "./chunk-A7QU6JC6.js";
|
|
10
10
|
import "./chunk-SMR7JQK6.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "archondev",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.4",
|
|
4
4
|
"description": "Local-first AI-powered development governance system",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -57,7 +57,6 @@
|
|
|
57
57
|
"dependencies": {
|
|
58
58
|
"@anthropic-ai/sdk": "^0.71.2",
|
|
59
59
|
"@supabase/supabase-js": "^2.90.1",
|
|
60
|
-
"@types/glob": "^9.0.0",
|
|
61
60
|
"@types/node": "^25.0.9",
|
|
62
61
|
"better-sqlite3": "^12.6.2",
|
|
63
62
|
"chalk": "^5.6.2",
|