archondev 2.1.2 → 2.1.6

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 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 archon && archon
12
+ npm install -g archondev && archon
13
13
 
14
14
  # Windows PowerShell:
15
- npm install -g archon; archon
15
+ npm install -g archondev; archon
16
16
  ```
17
17
 
18
18
  **What you get:**
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  bugReport
3
- } from "./chunk-62OWYYHV.js";
3
+ } from "./chunk-KF6MFAB4.js";
4
4
  import "./chunk-5IQKC2TD.js";
5
5
  import "./chunk-A7QU6JC6.js";
6
6
  import "./chunk-IVY5AHPS.js";
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-M4LGRTLC.js";
5
5
  import {
6
6
  loadAtom
7
- } from "./chunk-UZT2L27M.js";
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-N67PD2HF.js");
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
- \u26A0 ${conflictReport.conflicts.length} conflict(s) detected:`));
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("\u26A0");
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("\u26A0 No learnings captured to progress.txt"));
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("\u26A0 No AGENTS.md updates (no reusable patterns found)"));
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
  }
@@ -1,3 +1,6 @@
1
+ import {
2
+ login
3
+ } from "./chunk-UI4UQ24R.js";
1
4
  import {
2
5
  keyManager
3
6
  } from "./chunk-SMR7JQK6.js";
@@ -541,6 +544,23 @@ function prompt(question) {
541
544
  });
542
545
  });
543
546
  }
547
+ function promptYesNo(question, defaultValue) {
548
+ return new Promise((resolve) => {
549
+ const rl = readline.createInterface({
550
+ input: process.stdin,
551
+ output: process.stdout
552
+ });
553
+ const hint = defaultValue ? "(Y/n)" : "(y/N)";
554
+ rl.question(`${chalk.cyan("?")} ${question} ${hint}: `, (answer) => {
555
+ rl.close();
556
+ if (answer.trim() === "") {
557
+ resolve(defaultValue);
558
+ } else {
559
+ resolve(answer.toLowerCase().startsWith("y"));
560
+ }
561
+ });
562
+ });
563
+ }
544
564
  function formatCost(dollars) {
545
565
  if (dollars < 0.01) {
546
566
  return `$${dollars.toFixed(4)}`;
@@ -557,9 +577,7 @@ function formatTokens(tokens) {
557
577
  return tokens.toString();
558
578
  }
559
579
  async function interactiveSettings() {
560
- console.log(chalk.blue("\n\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\u2501\u2501\u2501\u2501\u2501"));
561
- console.log(chalk.bold.white(" Settings & Preferences"));
562
- console.log(chalk.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\u2501\u2501\u2501\u2501\u2501\n"));
580
+ console.log(chalk.bold("\nSettings & Preferences\n"));
563
581
  const spinner = ora("Loading settings...").start();
564
582
  const [profile, usage, providers] = await Promise.all([
565
583
  fetchUserProfile(),
@@ -568,7 +586,12 @@ async function interactiveSettings() {
568
586
  ]);
569
587
  spinner.stop();
570
588
  if (!profile) {
571
- console.log(chalk.yellow("Not logged in. Run: archon login\n"));
589
+ console.log(chalk.yellow("Not logged in.\n"));
590
+ const shouldLogin = await promptYesNo("Would you like to login now?", true);
591
+ if (shouldLogin) {
592
+ await login("github");
593
+ await interactiveSettings();
594
+ }
572
595
  return;
573
596
  }
574
597
  await displayCurrentSettings(profile, usage, providers);
@@ -636,7 +659,7 @@ async function displayCurrentSettings(profile, usage, providers) {
636
659
  console.log(` Secondary: ${formatModelDisplay(profile.pref_secondary_adversarial, defaults.secondary)}`);
637
660
  }
638
661
  async function changeBillingMode(currentTier) {
639
- console.log(chalk.bold("\n\u2501\u2501\u2501 Billing Mode \u2501\u2501\u2501\n"));
662
+ console.log(chalk.bold("\n-- Billing Mode --\n"));
640
663
  console.log(chalk.dim("Choose how you want to pay for AI usage:\n"));
641
664
  const byokSelected = currentTier === "BYOK";
642
665
  const creditsSelected = currentTier === "CREDITS";
@@ -673,7 +696,7 @@ async function changeBillingMode(currentTier) {
673
696
  }
674
697
  }
675
698
  async function setDefaultModelsMenu(profile, providers) {
676
- console.log(chalk.bold("\n\u2501\u2501\u2501 Default Models \u2501\u2501\u2501\n"));
699
+ console.log(chalk.bold("\n-- Default Models --\n"));
677
700
  const defaults = getDefaultAdversarialModels();
678
701
  console.log(` ${chalk.cyan("1")}) Fast Model: ${formatModelDisplay(profile.pref_fast_model, getDefaultModel("fast"))}`);
679
702
  console.log(` ${chalk.cyan("2")}) Thinking Model: ${formatModelDisplay(profile.pref_thinking_model, getDefaultModel("thinking"))}`);
@@ -723,7 +746,7 @@ async function setDefaultModelsMenu(profile, providers) {
723
746
  }
724
747
  }
725
748
  async function manageApiKeys() {
726
- console.log(chalk.bold("\n\u2501\u2501\u2501 API Keys \u2501\u2501\u2501\n"));
749
+ console.log(chalk.bold("\n-- API Keys --\n"));
727
750
  const providers = await getUserProviders();
728
751
  if (providers.length > 0) {
729
752
  console.log(chalk.blue("Configured providers:"));
@@ -772,7 +795,7 @@ async function manageApiKeys() {
772
795
  }
773
796
  }
774
797
  async function viewUsageDetails() {
775
- console.log(chalk.bold("\n\u2501\u2501\u2501 Usage Details \u2501\u2501\u2501\n"));
798
+ console.log(chalk.bold("\n-- Usage Details --\n"));
776
799
  const spinner = ora("Loading usage data...").start();
777
800
  const config = await loadConfig();
778
801
  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("\n\u{1F4CB} Bug Report: ") + chalk.bold(title));
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
- \u26A0 RCA generation failed: ${error instanceof Error ? error.message : "Unknown error"}`));
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\u26A0 No API key configured. Skipping RCA."));
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("\n\u{1F4CB} Summary"));
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
- return existsSync(archMdPath) || existsSync(archonDir);
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\u{1F3DB}\uFE0F ArchonDev Initialization\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("\u26A0 needs_fix");
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(" \u26A0 Architecture Impact:"));
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("\n\u{1F4CB} Starting adversarial planning..."));
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(` \u26A0 ${risk}`));
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
  listLocalAtoms
3
- } from "./chunk-UZT2L27M.js";
3
+ } from "./chunk-RCW22YNI.js";
4
4
 
5
5
  // src/cli/list.ts
6
6
  import chalk from "chalk";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  loadAtom
3
- } from "./chunk-UZT2L27M.js";
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
- \u{1F4CA} Parallel execution complete:`));
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("\n\u{1F4CA} Parallel Execution Status\n"));
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-XRWIU3RD.js";
3
+ } from "./chunk-3NPZQOK2.js";
4
4
  import "./chunk-M4LGRTLC.js";
5
- import "./chunk-UZT2L27M.js";
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-XRWIU3RD.js";
10
+ } from "./chunk-3NPZQOK2.js";
11
11
  import {
12
12
  list
13
- } from "./chunk-N73LAU7W.js";
13
+ } from "./chunk-TEY4GCMH.js";
14
14
  import {
15
15
  bugReport
16
- } from "./chunk-62OWYYHV.js";
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-UDBFDXJI.js";
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-JDPFHHTO.js";
43
+ } from "./chunk-F3RLDQTQ.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-XKRAXJN5.js";
57
+ } from "./chunk-P666JE3G.js";
58
58
  import {
59
59
  parallelClean,
60
60
  parallelMerge,
61
61
  parallelStatus
62
- } from "./chunk-OY7OJKFD.js";
62
+ } from "./chunk-TSSFMB6E.js";
63
63
  import {
64
64
  listLocalAtoms,
65
65
  loadAtom,
66
66
  plan
67
- } from "./chunk-UZT2L27M.js";
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(` \u26A0 ${risk}`));
215
+ console.log(chalk2.yellow(` [!] ${risk}`));
216
216
  }
217
217
  }
218
218
  console.log("");
@@ -870,15 +870,25 @@ 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
- console.log(chalk4.blue("\n\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\u2501\u2501\u2501\u2501\u2501"));
876
- console.log(chalk4.bold.white(" ArchonDev - AI-Powered Development Governance"));
877
- 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\u2501\u2501\u2501\u2501\u2501\n"));
875
+ if (!options.skipGovernanceBanner) {
876
+ console.log(chalk4.bold("\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
+ }
879
+ const token = await getAuthToken();
880
+ if (!token) {
881
+ console.log(chalk4.yellow("[!] Not logged in"));
882
+ const shouldLogin = await promptYesNo("Would you like to login now?", true);
883
+ if (shouldLogin) {
884
+ await login();
885
+ console.log();
886
+ }
887
+ }
878
888
  const contextManager = new ContextManager();
879
889
  const pendingAtomsData = await contextManager.getPendingAtomsData(cwd);
880
890
  if (pendingAtomsData && pendingAtomsData.atoms.length > 0) {
881
- console.log(chalk4.yellow("\u26A1 Previous session had pending atoms:\n"));
891
+ console.log(chalk4.yellow("[!] Previous session had pending atoms:\n"));
882
892
  for (const atomId of pendingAtomsData.atoms) {
883
893
  console.log(chalk4.dim(` \u2022 ${atomId}`));
884
894
  }
@@ -899,8 +909,10 @@ async function start() {
899
909
  }
900
910
  }
901
911
  const projectState = detectProjectState(cwd);
902
- const governanceStatus = await gatherGovernanceStatus(cwd);
903
- displayGovernanceBanner(governanceStatus);
912
+ if (!options.skipGovernanceBanner) {
913
+ const governanceStatus = await gatherGovernanceStatus(cwd);
914
+ await displayGovernanceBanner(governanceStatus);
915
+ }
904
916
  if (await shouldRunAutoCleanup(cwd)) {
905
917
  await runAutoCleanupCheck(cwd);
906
918
  }
@@ -1028,16 +1040,21 @@ async function gatherGovernanceStatus(cwd) {
1028
1040
  }
1029
1041
  return status2;
1030
1042
  }
1031
- function displayGovernanceBanner(status2) {
1032
- 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"));
1033
- console.log(chalk4.bold.white(" ArchonDev Governance Active"));
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"));
1043
+ async function displayGovernanceBanner(status2) {
1044
+ console.log(chalk4.bold("Governance Status"));
1045
+ 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
1046
  if (status2.hasArchitecture) {
1036
1047
  console.log(chalk4.green(" \u2713") + ` ARCHITECTURE.md loaded (${status2.posture} posture)`);
1037
1048
  console.log(chalk4.green(" \u2713") + ` ${status2.invariantsCount} invariants enforced`);
1038
1049
  console.log(chalk4.green(" \u2713") + ` ${status2.protectedPathsCount} protected paths defined`);
1039
1050
  } else {
1040
- console.log(chalk4.yellow(" \u26A0") + " ARCHITECTURE.md not found - run " + chalk4.cyan("archon init"));
1051
+ console.log(chalk4.yellow(" [!]") + " ARCHITECTURE.md not found.");
1052
+ const shouldInit = await promptYesNo("Would you like to initialize now?", true);
1053
+ if (shouldInit) {
1054
+ const { init: init2 } = await import("./init-6EXMDCWC.js");
1055
+ await init2({ analyze: true, git: true });
1056
+ console.log();
1057
+ }
1041
1058
  }
1042
1059
  console.log(chalk4.green(" \u2713") + ` ${status2.dependencyRulesCount} dependency rules active`);
1043
1060
  if (status2.lastSessionDate) {
@@ -1047,10 +1064,10 @@ function displayGovernanceBanner(status2) {
1047
1064
  console.log();
1048
1065
  console.log(chalk4.cyan(` Pending: ${status2.pendingAtomsCount} atoms ready for execution`));
1049
1066
  }
1050
- 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\n"));
1067
+ console.log();
1051
1068
  }
1052
1069
  async function handleNewProject(cwd, state) {
1053
- console.log(chalk4.yellow("\u{1F389}") + chalk4.bold(" Starting a new project? Great!\n"));
1070
+ console.log(chalk4.bold("Starting a new project? Great!\n"));
1054
1071
  console.log(chalk4.dim("I'll ask you a few quick questions to set things up right."));
1055
1072
  console.log(chalk4.dim("Answer as much or as little as you want \u2014 you can always refine later.\n"));
1056
1073
  console.log(chalk4.bold("What would you like to do?\n"));
@@ -1079,7 +1096,7 @@ async function handleNewProject(cwd, state) {
1079
1096
  }
1080
1097
  }
1081
1098
  async function runNewProjectInterview(cwd) {
1082
- console.log(chalk4.blue("\n\u2501\u2501\u2501 Project Interview \u2501\u2501\u2501\n"));
1099
+ console.log(chalk4.blue("\n-- Project Interview --\n"));
1083
1100
  console.log(chalk4.bold("Phase 1: The Vision\n"));
1084
1101
  const projectName = await prompt("What's the project name?");
1085
1102
  const projectDescription = await prompt("In one sentence, what does this project do?");
@@ -1110,8 +1127,8 @@ async function runNewProjectInterview(cwd) {
1110
1127
  console.log(chalk4.bold("\nPhase 3: Preferences ") + chalk4.dim("(press Enter to skip)\n"));
1111
1128
  const protectedFiles = await prompt("Any files AI should NEVER modify without asking? (comma-separated)");
1112
1129
  const noNoPatterns = await prompt('Anything AI should NEVER do? (e.g., "no console.log")');
1113
- console.log(chalk4.blue("\n\u2501\u2501\u2501 Generating Project Files \u2501\u2501\u2501\n"));
1114
- const { init: init2 } = await import("./init-7EWVBX6O.js");
1130
+ console.log(chalk4.blue("\n-- Generating Project Files --\n"));
1131
+ const { init: init2 } = await import("./init-6EXMDCWC.js");
1115
1132
  await init2({ analyze: false, git: true });
1116
1133
  const today = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
1117
1134
  const progressEntry = `
@@ -1151,14 +1168,14 @@ ${noNoPatterns ? `- **Forbidden patterns:** ${noNoPatterns}` : "- No forbidden p
1151
1168
  if (continueChoice) {
1152
1169
  const description = await prompt("Describe what you want to build first");
1153
1170
  if (description.trim()) {
1154
- const { plan: plan2 } = await import("./plan-VRAS6IYQ.js");
1171
+ const { plan: plan2 } = await import("./plan-W2UXAR6E.js");
1155
1172
  await plan2(description, {});
1156
1173
  }
1157
1174
  }
1158
1175
  }
1159
1176
  async function quickStart(cwd) {
1160
- console.log(chalk4.blue("\n\u2501\u2501\u2501 Quick Start \u2501\u2501\u2501\n"));
1161
- const { init: init2 } = await import("./init-7EWVBX6O.js");
1177
+ console.log(chalk4.blue("\n-- Quick Start --\n"));
1178
+ const { init: init2 } = await import("./init-6EXMDCWC.js");
1162
1179
  await init2({ analyze: false, git: true });
1163
1180
  const today = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
1164
1181
  const progressPath = join4(cwd, "progress.txt");
@@ -1184,7 +1201,7 @@ This file tracks learnings and decisions across sessions.
1184
1201
  await showMainMenu();
1185
1202
  }
1186
1203
  async function handleAdaptExisting(cwd, state) {
1187
- console.log(chalk4.yellow("\u{1F4C1}") + chalk4.bold(" Existing project detected!\n"));
1204
+ console.log(chalk4.bold("Existing project detected!\n"));
1188
1205
  console.log(chalk4.dim("I can analyze your codebase and adapt the governance files to match your structure."));
1189
1206
  console.log(chalk4.dim("This helps me understand your architecture without changing any code.\n"));
1190
1207
  console.log(chalk4.bold("What would you like to do?\n"));
@@ -1216,8 +1233,8 @@ async function handleAdaptExisting(cwd, state) {
1216
1233
  }
1217
1234
  }
1218
1235
  async function analyzeAndAdapt(cwd) {
1219
- console.log(chalk4.blue("\n\u2501\u2501\u2501 Analyzing Project \u2501\u2501\u2501\n"));
1220
- const { init: init2 } = await import("./init-7EWVBX6O.js");
1236
+ console.log(chalk4.blue("\n-- Analyzing Project --\n"));
1237
+ const { init: init2 } = await import("./init-6EXMDCWC.js");
1221
1238
  await init2({ analyze: true, git: true });
1222
1239
  const today = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
1223
1240
  const progressPath = join4(cwd, "progress.txt");
@@ -1242,9 +1259,9 @@ async function analyzeAndAdapt(cwd) {
1242
1259
  await showMainMenu();
1243
1260
  }
1244
1261
  async function codeReviewFirst(cwd) {
1245
- console.log(chalk4.blue("\n\u2501\u2501\u2501 Code Review Mode \u2501\u2501\u2501\n"));
1262
+ console.log(chalk4.blue("\n-- Code Review Mode --\n"));
1246
1263
  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-3R6QXAXQ.js");
1264
+ const { reviewInit: reviewInit2, reviewAnalyze: reviewAnalyze2, reviewRun: reviewRun2 } = await import("./review-QV4TQM2Z.js");
1248
1265
  const reviewDbPath = join4(cwd, "docs", "code-review", "review-tasks.db");
1249
1266
  if (!existsSync4(reviewDbPath)) {
1250
1267
  await reviewInit2();
@@ -1257,9 +1274,9 @@ async function codeReviewFirst(cwd) {
1257
1274
  console.log(chalk4.dim("\nAfter reviewing, you can run ") + chalk4.cyan("archon") + chalk4.dim(" again to set up governance.\n"));
1258
1275
  }
1259
1276
  async function manualSetup(cwd) {
1260
- console.log(chalk4.blue("\n\u2501\u2501\u2501 Manual Setup \u2501\u2501\u2501\n"));
1277
+ console.log(chalk4.blue("\n-- Manual Setup --\n"));
1261
1278
  console.log(chalk4.dim("Creating template files. You can customize them manually.\n"));
1262
- const { init: init2 } = await import("./init-7EWVBX6O.js");
1279
+ const { init: init2 } = await import("./init-6EXMDCWC.js");
1263
1280
  await init2({ analyze: false, git: true });
1264
1281
  console.log(chalk4.bold("\nWhat to customize:\n"));
1265
1282
  console.log(` ${chalk4.cyan("1. ARCHITECTURE.md")} \u2014 Update components to match your folders`);
@@ -1269,8 +1286,8 @@ async function manualSetup(cwd) {
1269
1286
  await showMainMenu();
1270
1287
  }
1271
1288
  async function quickAdapt(cwd) {
1272
- console.log(chalk4.blue("\n\u26A1 Using defaults \u2014 let's go!\n"));
1273
- const { init: init2 } = await import("./init-7EWVBX6O.js");
1289
+ console.log(chalk4.blue("\n> Using defaults \u2014 let's go!\n"));
1290
+ const { init: init2 } = await import("./init-6EXMDCWC.js");
1274
1291
  await init2({ analyze: true, git: true });
1275
1292
  const today = (/* @__PURE__ */ new Date()).toISOString().split("T")[0];
1276
1293
  const progressPath = join4(cwd, "progress.txt");
@@ -1288,7 +1305,7 @@ async function quickAdapt(cwd) {
1288
1305
  await showMainMenu();
1289
1306
  }
1290
1307
  async function handleContinueSession(cwd, state) {
1291
- console.log(chalk4.green("\u{1F44B}") + chalk4.bold(" Welcome back!\n"));
1308
+ console.log(chalk4.bold("Welcome back!\n"));
1292
1309
  if (state.lastProgressEntry) {
1293
1310
  console.log(chalk4.dim("Last activity:"));
1294
1311
  console.log(chalk4.dim(" " + state.lastProgressEntry.split("\n")[0]));
@@ -1296,7 +1313,7 @@ async function handleContinueSession(cwd, state) {
1296
1313
  }
1297
1314
  const handoff = checkForHandoff(cwd);
1298
1315
  if (handoff) {
1299
- console.log(chalk4.yellow("\u{1F4CB} Found handoff from last session:\n"));
1316
+ console.log(chalk4.yellow("[HANDOFF] Found from last session:\n"));
1300
1317
  console.log(chalk4.dim(handoff.nextSteps));
1301
1318
  console.log();
1302
1319
  const continueHandoff = await promptYesNo("Continue from handoff?", true);
@@ -1365,27 +1382,27 @@ async function showReviewProgress(cwd) {
1365
1382
  const pending = stats.pending + stats.inReview;
1366
1383
  const needsFix = stats.needsFix;
1367
1384
  console.log(
1368
- chalk4.blue("\u{1F4CA} Review Progress:") + chalk4.dim(` ${completed}/${total} completed`) + (needsFix > 0 ? chalk4.red(` (${needsFix} need fixes)`) : "") + (pending > 0 ? chalk4.yellow(` (${pending} pending)`) : "")
1385
+ chalk4.blue("Review Progress:") + chalk4.dim(` ${completed}/${total} completed`) + (needsFix > 0 ? chalk4.red(` (${needsFix} need fixes)`) : "") + (pending > 0 ? chalk4.yellow(` (${pending} pending)`) : "")
1369
1386
  );
1370
1387
  console.log();
1371
1388
  } catch {
1372
1389
  }
1373
1390
  }
1374
1391
  async function planTask() {
1375
- const { plan: plan2 } = await import("./plan-VRAS6IYQ.js");
1392
+ const { plan: plan2 } = await import("./plan-W2UXAR6E.js");
1376
1393
  const description = await prompt("Describe what you want to build");
1377
1394
  if (description.trim()) {
1378
1395
  await plan2(description, {});
1379
1396
  }
1380
1397
  }
1381
1398
  async function listAtoms() {
1382
- const { list: list2 } = await import("./list-6LNHTEOA.js");
1399
+ const { list: list2 } = await import("./list-LEFAISNL.js");
1383
1400
  await list2({});
1384
1401
  }
1385
1402
  async function executeNext() {
1386
- const { listLocalAtoms: listLocalAtoms2 } = await import("./plan-VRAS6IYQ.js");
1403
+ const { listLocalAtoms: listLocalAtoms2 } = await import("./plan-W2UXAR6E.js");
1387
1404
  const { analyzeProject, getComplexityDescription, getModeDescription } = await import("./orchestration-X6LHSHBJ.js");
1388
- const { loadExecutionPreferences } = await import("./preferences-ND2AKZYW.js");
1405
+ const { loadExecutionPreferences } = await import("./preferences-3Z4OCNTT.js");
1389
1406
  const cwd = process.cwd();
1390
1407
  const atoms = await listLocalAtoms2();
1391
1408
  const pendingAtoms = atoms.filter((a) => a.status === "READY" || a.status === "IN_PROGRESS");
@@ -1396,7 +1413,7 @@ async function executeNext() {
1396
1413
  if (pendingAtoms.length > 1) {
1397
1414
  const analysis = analyzeProject(pendingAtoms);
1398
1415
  const prefs = await loadExecutionPreferences(cwd);
1399
- console.log(chalk4.blue("\n\u2501\u2501\u2501 Project Analysis \u2501\u2501\u2501\n"));
1416
+ console.log(chalk4.blue("\n-- Project Analysis --\n"));
1400
1417
  console.log(` ${chalk4.bold("Atoms:")} ${analysis.atomCount}`);
1401
1418
  console.log(` ${chalk4.bold("Estimated:")} ${analysis.estimatedMinutes} minutes`);
1402
1419
  console.log(` ${chalk4.bold("Complexity:")} ${analysis.complexity} - ${getComplexityDescription(analysis.complexity)}`);
@@ -1418,14 +1435,14 @@ async function executeNext() {
1418
1435
  const atomId = await prompt("Enter atom ID to execute (or press Enter for first pending)");
1419
1436
  const targetId = atomId.trim() || pendingAtoms[0]?.id;
1420
1437
  if (targetId) {
1421
- const { execute: execute2 } = await import("./execute-2S2UHTLN.js");
1438
+ const { execute: execute2 } = await import("./execute-5ZSLSWPZ.js");
1422
1439
  await execute2(targetId, {});
1423
1440
  } else {
1424
1441
  console.log(chalk4.yellow("No atom to execute."));
1425
1442
  }
1426
1443
  }
1427
1444
  async function reportBug() {
1428
- const { bugReport: bugReport2 } = await import("./bug-COUVQ4X3.js");
1445
+ const { bugReport: bugReport2 } = await import("./bug-K4V357B2.js");
1429
1446
  const title = await prompt("Bug title");
1430
1447
  if (title.trim()) {
1431
1448
  await bugReport2(title, {});
@@ -1436,7 +1453,7 @@ async function viewStatus() {
1436
1453
  await status2();
1437
1454
  }
1438
1455
  async function settingsMenu() {
1439
- const { interactiveSettings } = await import("./preferences-ND2AKZYW.js");
1456
+ const { interactiveSettings } = await import("./preferences-3Z4OCNTT.js");
1440
1457
  await interactiveSettings();
1441
1458
  await showMainMenu();
1442
1459
  }
@@ -1445,7 +1462,7 @@ async function reviewCode() {
1445
1462
  const reviewDbPath = join4(cwd, "docs", "code-review", "review-tasks.db");
1446
1463
  if (!existsSync4(reviewDbPath)) {
1447
1464
  console.log(chalk4.dim("Code review not initialized. Starting setup...\n"));
1448
- const { reviewInit: reviewInit2 } = await import("./review-3R6QXAXQ.js");
1465
+ const { reviewInit: reviewInit2 } = await import("./review-QV4TQM2Z.js");
1449
1466
  await reviewInit2();
1450
1467
  console.log();
1451
1468
  }
@@ -1460,27 +1477,27 @@ async function reviewCode() {
1460
1477
  const choice = await prompt("Enter choice");
1461
1478
  switch (choice.toLowerCase()) {
1462
1479
  case "1": {
1463
- const { reviewAnalyze: reviewAnalyze2 } = await import("./review-3R6QXAXQ.js");
1480
+ const { reviewAnalyze: reviewAnalyze2 } = await import("./review-QV4TQM2Z.js");
1464
1481
  await reviewAnalyze2();
1465
1482
  break;
1466
1483
  }
1467
1484
  case "2": {
1468
- const { reviewStatus: reviewStatus2 } = await import("./review-3R6QXAXQ.js");
1485
+ const { reviewStatus: reviewStatus2 } = await import("./review-QV4TQM2Z.js");
1469
1486
  await reviewStatus2();
1470
1487
  break;
1471
1488
  }
1472
1489
  case "3": {
1473
- const { reviewNext: reviewNext2 } = await import("./review-3R6QXAXQ.js");
1490
+ const { reviewNext: reviewNext2 } = await import("./review-QV4TQM2Z.js");
1474
1491
  await reviewNext2();
1475
1492
  break;
1476
1493
  }
1477
1494
  case "4": {
1478
- const { reviewList: reviewList2 } = await import("./review-3R6QXAXQ.js");
1495
+ const { reviewList: reviewList2 } = await import("./review-QV4TQM2Z.js");
1479
1496
  await reviewList2({});
1480
1497
  break;
1481
1498
  }
1482
1499
  case "5": {
1483
- const { reviewRun: reviewRun2 } = await import("./review-3R6QXAXQ.js");
1500
+ const { reviewRun: reviewRun2 } = await import("./review-QV4TQM2Z.js");
1484
1501
  await reviewRun2({ all: true });
1485
1502
  break;
1486
1503
  }
@@ -1661,7 +1678,7 @@ async function showHistory(options = {}) {
1661
1678
  const usage = data;
1662
1679
  spinner.stop();
1663
1680
  console.log();
1664
- console.log(chalk5.bold("\u{1F4CA} Usage History"));
1681
+ console.log(chalk5.bold("Usage History"));
1665
1682
  console.log();
1666
1683
  if (!usage || usage.length === 0) {
1667
1684
  console.log(chalk5.dim(" No usage recorded yet."));
@@ -1747,7 +1764,7 @@ async function manageBudget(options = {}) {
1747
1764
  }
1748
1765
  spinner.stop();
1749
1766
  console.log();
1750
- console.log(chalk5.bold("\u{1F4CA} Monthly Budget"));
1767
+ console.log(chalk5.bold("Monthly Budget"));
1751
1768
  console.log();
1752
1769
  if (profile.monthly_budget_cents === null) {
1753
1770
  console.log(` Budget: ${chalk5.dim("No limit set")}`);
@@ -2195,7 +2212,7 @@ Examples:
2195
2212
  process.exit(0);
2196
2213
  }
2197
2214
  console.log(chalk6.yellow(`
2198
- \u26A0\uFE0F Found ${result.impacts.length} dependency impact(s):
2215
+ [!] Found ${result.impacts.length} dependency impact(s):
2199
2216
  `));
2200
2217
  for (const impact of result.impacts) {
2201
2218
  const severityColor = impact.rule.severity === "BLOCKER" ? chalk6.red : impact.rule.severity === "WARNING" ? chalk6.yellow : chalk6.blue;
@@ -2516,7 +2533,7 @@ async function a11yCheck(options) {
2516
2533
  console.log(chalk7.dim("Note: Run manual testing with screen readers for full compliance.\n"));
2517
2534
  return;
2518
2535
  }
2519
- console.log(chalk7.red(`\u26A0\uFE0F ${issues.length} Accessibility Issues Found
2536
+ console.log(chalk7.red(`[!] ${issues.length} Accessibility Issues Found
2520
2537
  `));
2521
2538
  const criticalCount = issues.filter((i) => i.severity === "critical").length;
2522
2539
  const majorCount = issues.filter((i) => i.severity === "major").length;
@@ -2544,7 +2561,7 @@ async function a11yCheck(options) {
2544
2561
  }
2545
2562
  console.log();
2546
2563
  }
2547
- console.log(chalk7.bold.yellow("\n\u2696\uFE0F Legal Notice\n"));
2564
+ console.log(chalk7.bold.yellow("\n[LEGAL] Notice\n"));
2548
2565
  console.log(chalk7.dim("Websites that don't meet accessibility standards may violate:"));
2549
2566
  console.log(chalk7.dim(" \u2022 ADA (Americans with Disabilities Act) \u2014 US"));
2550
2567
  console.log(chalk7.dim(" \u2022 EAA (European Accessibility Act) \u2014 EU, effective June 2025"));
@@ -2673,7 +2690,7 @@ async function a11yBadge(options) {
2673
2690
  async function a11yPreDeploy() {
2674
2691
  const prompt2 = createPrompt();
2675
2692
  try {
2676
- console.log(chalk7.blue("\n\u26A0\uFE0F Pre-Deploy Accessibility Check\n"));
2693
+ console.log(chalk7.blue("\n[CHECK] Pre-Deploy Accessibility\n"));
2677
2694
  console.log(chalk7.dim("Before deploying a live website, accessibility compliance is required.\n"));
2678
2695
  await a11yCheck({});
2679
2696
  const reportPath = join6(process.cwd(), ".archon/a11y-report.json");
@@ -2699,7 +2716,7 @@ async function a11yPreDeploy() {
2699
2716
  await a11yCheck({});
2700
2717
  return true;
2701
2718
  } else if (choice === "2") {
2702
- console.log(chalk7.yellow("\n\u26A0\uFE0F Acknowledged. Proceeding without full accessibility compliance."));
2719
+ console.log(chalk7.yellow("\n[!] Acknowledged. Proceeding without full accessibility compliance."));
2703
2720
  console.log(chalk7.dim("Consider addressing these issues in a future session.\n"));
2704
2721
  return true;
2705
2722
  } else {
@@ -2840,7 +2857,7 @@ async function geoIdentity() {
2840
2857
  console.log(chalk8.blue("\n\u{1F3AF} GEO Identity Generator\n"));
2841
2858
  const { allowed, tier } = await checkStrongModelAccess();
2842
2859
  if (!allowed) {
2843
- console.log(chalk8.yellow(`\u26A0\uFE0F Your tier (${tier}) uses basic models.`));
2860
+ console.log(chalk8.yellow(`[!] Your tier (${tier}) uses basic models.`));
2844
2861
  console.log(chalk8.dim("For better results, add credits or use BYOK mode.\n"));
2845
2862
  }
2846
2863
  console.log(chalk8.dim("Reading homepage and about page content...\n"));
@@ -3020,7 +3037,7 @@ async function geoFaq(options) {
3020
3037
  const { identityPhrase, shortDescription } = config.geo;
3021
3038
  const { allowed, tier } = await checkStrongModelAccess();
3022
3039
  if (!allowed) {
3023
- console.log(chalk8.yellow(`\u26A0\uFE0F Your tier (${tier}) uses basic models.`));
3040
+ console.log(chalk8.yellow(`[!] Your tier (${tier}) uses basic models.`));
3024
3041
  console.log(chalk8.dim("For better results, add credits or use BYOK mode.\n"));
3025
3042
  }
3026
3043
  console.log(chalk8.dim("Generating FAQ content with AI...\n"));
@@ -3103,7 +3120,7 @@ async function geoAudit() {
3103
3120
  console.log(chalk8.green("\u2705 Brand keyword in H1"));
3104
3121
  } else {
3105
3122
  result.issues.push("Brand phrase keyword not found in H1");
3106
- console.log(chalk8.yellow("\u26A0\uFE0F Brand keyword not in H1"));
3123
+ console.log(chalk8.yellow("[!] Brand keyword not in H1"));
3107
3124
  }
3108
3125
  const metaMatch = content.match(/<meta[^>]*name=["']description["'][^>]*content=["']([^"']*)["']/i);
3109
3126
  if (metaMatch?.[1] && metaMatch[1].toLowerCase().includes(firstKeyword)) {
@@ -3111,7 +3128,7 @@ async function geoAudit() {
3111
3128
  console.log(chalk8.green("\u2705 Brand keyword in meta description"));
3112
3129
  } else {
3113
3130
  result.issues.push("Brand phrase keyword not found in meta description");
3114
- console.log(chalk8.yellow("\u26A0\uFE0F Brand keyword not in meta description"));
3131
+ console.log(chalk8.yellow("[!] Brand keyword not in meta description"));
3115
3132
  }
3116
3133
  if (content.includes("application/ld+json")) {
3117
3134
  if (content.includes('"@type":"Organization"') || content.includes('"@type": "Organization"')) {
@@ -3119,21 +3136,21 @@ async function geoAudit() {
3119
3136
  console.log(chalk8.green("\u2705 Organization schema present"));
3120
3137
  } else {
3121
3138
  result.issues.push("Organization schema not found");
3122
- console.log(chalk8.yellow("\u26A0\uFE0F Organization schema missing"));
3139
+ console.log(chalk8.yellow("[!] Organization schema missing"));
3123
3140
  }
3124
3141
  if (content.includes('"@type":"Service"') || content.includes('"@type": "Service"')) {
3125
3142
  result.hasServiceSchema = true;
3126
3143
  console.log(chalk8.green("\u2705 Service schema present"));
3127
3144
  } else {
3128
3145
  result.issues.push("Service schema not found");
3129
- console.log(chalk8.yellow("\u26A0\uFE0F Service schema missing"));
3146
+ console.log(chalk8.yellow("[!] Service schema missing"));
3130
3147
  }
3131
3148
  if (content.includes('"@type":"FAQPage"') || content.includes('"@type": "FAQPage"')) {
3132
3149
  result.hasFAQSchema = true;
3133
3150
  console.log(chalk8.green("\u2705 FAQPage schema present"));
3134
3151
  } else {
3135
3152
  result.issues.push("FAQPage schema not found");
3136
- console.log(chalk8.yellow("\u26A0\uFE0F FAQPage schema missing"));
3153
+ console.log(chalk8.yellow("[!] FAQPage schema missing"));
3137
3154
  }
3138
3155
  } else {
3139
3156
  result.issues.push("No JSON-LD schemas found");
@@ -3141,14 +3158,14 @@ async function geoAudit() {
3141
3158
  }
3142
3159
  } else if (htmlFiles.length === 0) {
3143
3160
  result.issues.push("No index.html found");
3144
- console.log(chalk8.yellow("\u26A0\uFE0F No index.html found to audit"));
3161
+ console.log(chalk8.yellow("[!] No index.html found to audit"));
3145
3162
  }
3146
3163
  console.log();
3147
3164
  const passed = result.issues.length === 0;
3148
3165
  if (passed) {
3149
3166
  console.log(chalk8.green.bold("\u2705 GEO Audit Passed"));
3150
3167
  } else {
3151
- console.log(chalk8.yellow.bold(`\u26A0\uFE0F ${result.issues.length} issue(s) found`));
3168
+ console.log(chalk8.yellow.bold(`[!] ${result.issues.length} issue(s) found`));
3152
3169
  console.log();
3153
3170
  console.log(chalk8.bold("Recommendations:"));
3154
3171
  result.issues.forEach((issue, i) => {
@@ -3366,7 +3383,7 @@ async function seoCheck(options) {
3366
3383
  console.log(chalk9.dim("All essential meta tags are present."));
3367
3384
  return;
3368
3385
  }
3369
- console.log(chalk9.yellow(`\u26A0\uFE0F ${issues.length} SEO Issues Found
3386
+ console.log(chalk9.yellow(`[!] ${issues.length} SEO Issues Found
3370
3387
  `));
3371
3388
  const criticalCount = issues.filter((i) => i.severity === "critical").length;
3372
3389
  const warningCount = issues.filter((i) => i.severity === "warning").length;
@@ -4487,7 +4504,7 @@ async function indexUpdate(options) {
4487
4504
  }
4488
4505
  } catch (error) {
4489
4506
  console.log(`
4490
- ${chalk12.yellow(`\u26A0 Skipped ${file}: ${error instanceof Error ? error.message : "Unknown error"}`)}`);
4507
+ ${chalk12.yellow(`[!] Skipped ${file}: ${error instanceof Error ? error.message : "Unknown error"}`)}`);
4491
4508
  }
4492
4509
  }
4493
4510
  console.log("\r" + " ".repeat(70));
@@ -4735,11 +4752,12 @@ async function githubDisconnect() {
4735
4752
  var program = new Command4();
4736
4753
  program.name("archon").description("Local-first AI-powered development governance").version("1.1.0").action(async () => {
4737
4754
  const cwd = process.cwd();
4738
- if (!isInitialized(cwd)) {
4755
+ const wasInitialized = isInitialized(cwd);
4756
+ if (!wasInitialized) {
4739
4757
  console.log(chalk14.blue("\nArchonDev is not initialized in this folder.\n"));
4740
4758
  await init({ analyze: true, git: true });
4741
4759
  }
4742
- await start();
4760
+ await start({ skipGovernanceBanner: !wasInitialized });
4743
4761
  });
4744
4762
  program.command("login").description("Authenticate with ArchonDev").option("-p, --provider <provider>", "OAuth provider (github or google)", "github").action(async (options) => {
4745
4763
  const provider = options.provider;
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  init,
3
3
  isInitialized
4
- } from "./chunk-XKRAXJN5.js";
4
+ } from "./chunk-P666JE3G.js";
5
5
  import "./chunk-QGM4M3NI.js";
6
6
  export {
7
7
  init,
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  list
3
- } from "./chunk-N73LAU7W.js";
4
- import "./chunk-UZT2L27M.js";
3
+ } from "./chunk-TEY4GCMH.js";
4
+ import "./chunk-RCW22YNI.js";
5
5
  import "./chunk-5IQKC2TD.js";
6
6
  import "./chunk-A7QU6JC6.js";
7
7
  import "./chunk-SMR7JQK6.js";
@@ -3,8 +3,8 @@ import {
3
3
  parallelExecute,
4
4
  parallelMerge,
5
5
  parallelStatus
6
- } from "./chunk-OY7OJKFD.js";
7
- import "./chunk-UZT2L27M.js";
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";
@@ -2,7 +2,7 @@ import {
2
2
  listLocalAtoms,
3
3
  loadAtom,
4
4
  plan
5
- } from "./chunk-UZT2L27M.js";
5
+ } from "./chunk-RCW22YNI.js";
6
6
  import "./chunk-5IQKC2TD.js";
7
7
  import "./chunk-A7QU6JC6.js";
8
8
  import "./chunk-SMR7JQK6.js";
@@ -7,7 +7,9 @@ import {
7
7
  setPreference,
8
8
  showExecutionPreferences,
9
9
  showPreferences
10
- } from "./chunk-JDPFHHTO.js";
10
+ } from "./chunk-F3RLDQTQ.js";
11
+ import "./chunk-UI4UQ24R.js";
12
+ import "./chunk-M4LGRTLC.js";
11
13
  import "./chunk-SMR7JQK6.js";
12
14
  import "./chunk-IVY5AHPS.js";
13
15
  import "./chunk-QGM4M3NI.js";
@@ -9,7 +9,7 @@ import {
9
9
  reviewShow,
10
10
  reviewStatus,
11
11
  reviewUpdate
12
- } from "./chunk-UDBFDXJI.js";
12
+ } from "./chunk-QSYKKPFF.js";
13
13
  import "./chunk-VKM3HAHW.js";
14
14
  import "./chunk-A7QU6JC6.js";
15
15
  import "./chunk-QGM4M3NI.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "archondev",
3
- "version": "2.1.2",
3
+ "version": "2.1.6",
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",