archondev 2.19.1 → 2.19.2

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
@@ -133,6 +133,13 @@ pnpm exec tsx scripts/init-governance-db.ts
133
133
 
134
134
  No subscriptions. No commitments. Start free, upgrade anytime with `archon upgrade`.
135
135
 
136
+ ### BYOK Key Security
137
+
138
+ - Your API keys are stored locally in `~/.archon/keys.json` (never uploaded to ArchonDev servers).
139
+ - Keys are encrypted at rest with AES-256-GCM and the file is set to owner-only permissions (`0600`).
140
+ - BYOK runs locally; cloud execution is Credits-only.
141
+ - If your device is compromised, an attacker could access local files. Treat keys as sensitive secrets.
142
+
136
143
  ### Claude Pro/Max Subscription Support (Coming Soon)
137
144
 
138
145
  If you have an existing Claude subscription, you'll soon be able to use it with ArchonDev instead of API keys:
@@ -2,9 +2,9 @@ import {
2
2
  login,
3
3
  logout,
4
4
  status
5
- } from "./chunk-CZCY63EY.js";
5
+ } from "./chunk-F4OUCZPN.js";
6
6
  import "./chunk-M4LGRTLC.js";
7
- import "./chunk-LBBHM4I5.js";
7
+ import "./chunk-GBYW3YAY.js";
8
8
  import "./chunk-SVU7MLG6.js";
9
9
  import "./chunk-4VNS5WPM.js";
10
10
  export {
@@ -14,7 +14,7 @@ import {
14
14
  } from "./chunk-RDG5BUED.js";
15
15
  import {
16
16
  login
17
- } from "./chunk-CZCY63EY.js";
17
+ } from "./chunk-F4OUCZPN.js";
18
18
  import {
19
19
  getApiUrl,
20
20
  getAuthToken,
@@ -1071,7 +1071,7 @@ async function manageApiKeys() {
1071
1071
  if (removeIndex >= 0 && removeIndex < providers.length) {
1072
1072
  const providerToRemove = providers[removeIndex];
1073
1073
  if (providerToRemove) {
1074
- const { removeKey } = await import("./keys-U4QZE5YB.js");
1074
+ const { removeKey } = await import("./keys-T2VPHE7Z.js");
1075
1075
  await removeKey(providerToRemove);
1076
1076
  }
1077
1077
  }
@@ -1079,7 +1079,7 @@ async function manageApiKeys() {
1079
1079
  }
1080
1080
  const provider = providerMap[choice];
1081
1081
  if (provider) {
1082
- const { addKey } = await import("./keys-U4QZE5YB.js");
1082
+ const { addKey } = await import("./keys-T2VPHE7Z.js");
1083
1083
  await addKey(provider);
1084
1084
  }
1085
1085
  }
@@ -6,7 +6,7 @@ import {
6
6
  handleTierSetup,
7
7
  promptTierSelection,
8
8
  updateUserTier
9
- } from "./chunk-LBBHM4I5.js";
9
+ } from "./chunk-GBYW3YAY.js";
10
10
  import {
11
11
  clearConfig,
12
12
  loadConfig,
@@ -43,7 +43,7 @@ async function offerReauthentication(reason) {
43
43
  return false;
44
44
  }
45
45
  console.log();
46
- const { login } = await import("./auth-HQBAG4CR.js");
46
+ const { login } = await import("./auth-7DNVC6UX.js");
47
47
  await login({ skipTierSelection: true });
48
48
  const { loadConfig: reload } = await import("./config-JBPM2YAB.js");
49
49
  const config = await reload();
@@ -207,7 +207,7 @@ async function promptForApiKey() {
207
207
  return;
208
208
  }
209
209
  if (provider) {
210
- const { addKey } = await import("./keys-U4QZE5YB.js");
210
+ const { addKey } = await import("./keys-T2VPHE7Z.js");
211
211
  await addKey(provider, {});
212
212
  console.log();
213
213
  const addAnother = await promptYesNo("Would you like to add another API key?", false);
@@ -455,7 +455,7 @@ function promptYesNo(question, defaultValue) {
455
455
  }
456
456
  async function showKeyManagementMenu() {
457
457
  const { keyManager } = await import("./keys-THCHXIFD.js");
458
- const { listKeys, addKey, removeKey } = await import("./keys-U4QZE5YB.js");
458
+ const { listKeys, addKey, removeKey } = await import("./keys-T2VPHE7Z.js");
459
459
  console.log();
460
460
  console.log(chalk.bold("API Key Management"));
461
461
  console.log(chalk.dim("\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"));
@@ -47,6 +47,10 @@ async function addKey(provider, options = {}) {
47
47
  process.exit(1);
48
48
  }
49
49
  const label = options.label ?? "default";
50
+ console.log(chalk.dim("Security: Your API key stays on this machine (never uploaded)."));
51
+ console.log(chalk.dim(" \u2022 Encrypted at rest (AES-256-GCM)"));
52
+ console.log(chalk.dim(" \u2022 Stored in ~/.archon/keys.json with owner-only permissions (0600)"));
53
+ console.log(chalk.dim(" \u2022 Used only for local BYOK calls"));
50
54
  const apiKey = await promptForKey(provider);
51
55
  if (!apiKey) {
52
56
  console.error(chalk.red("API key cannot be empty"));
package/dist/index.js CHANGED
@@ -27,7 +27,7 @@ import {
27
27
  setPreference,
28
28
  showExecutionPreferences,
29
29
  showPreferences
30
- } from "./chunk-ZJXIOETW.js";
30
+ } from "./chunk-CTWVQ6F3.js";
31
31
  import {
32
32
  a11yBadge,
33
33
  a11yCheck,
@@ -85,14 +85,14 @@ import {
85
85
  listKeys,
86
86
  removeKey,
87
87
  setPrimaryKey
88
- } from "./chunk-75J2JMU3.js";
88
+ } from "./chunk-JNFXMWBR.js";
89
89
  import "./chunk-TFSHS7EN.js";
90
90
  import "./chunk-RDG5BUED.js";
91
91
  import {
92
92
  login,
93
93
  logout,
94
94
  status
95
- } from "./chunk-CZCY63EY.js";
95
+ } from "./chunk-F4OUCZPN.js";
96
96
  import {
97
97
  API_URL,
98
98
  SUPABASE_ANON_KEY,
@@ -102,7 +102,7 @@ import {
102
102
  handleTierSetup,
103
103
  promptTierSelection,
104
104
  updateUserTier
105
- } from "./chunk-LBBHM4I5.js";
105
+ } from "./chunk-GBYW3YAY.js";
106
106
  import {
107
107
  getAuthToken,
108
108
  loadConfig,
@@ -2850,22 +2850,22 @@ async function start(options = {}) {
2850
2850
  const choice = await promptWithCommands("What would you like to do?", { allowMultiline: true });
2851
2851
  switch (choice) {
2852
2852
  case "1":
2853
- const { handleTierSetup: handleTierSetup2 } = await import("./tier-selection-426HA765.js");
2853
+ const { handleTierSetup: handleTierSetup2 } = await import("./tier-selection-XFBM4SZ4.js");
2854
2854
  await handleTierSetup2("BYOK");
2855
2855
  break;
2856
2856
  case "2":
2857
- const { updateUserTier: updateUserTier2 } = await import("./tier-selection-426HA765.js");
2857
+ const { updateUserTier: updateUserTier2 } = await import("./tier-selection-XFBM4SZ4.js");
2858
2858
  const result = await updateUserTier2("CREDITS");
2859
2859
  if (result.success) {
2860
2860
  config.tier = "CREDITS";
2861
2861
  await saveConfig(config);
2862
2862
  console.log(chalk6.green("\u2713 Switched to Managed Plan"));
2863
- const { handleTierSetup: setupCredits } = await import("./tier-selection-426HA765.js");
2863
+ const { handleTierSetup: setupCredits } = await import("./tier-selection-XFBM4SZ4.js");
2864
2864
  await setupCredits("CREDITS");
2865
2865
  }
2866
2866
  break;
2867
2867
  case "3":
2868
- const { updateUserTier: downgrade } = await import("./tier-selection-426HA765.js");
2868
+ const { updateUserTier: downgrade } = await import("./tier-selection-XFBM4SZ4.js");
2869
2869
  const downgradeResult = await downgrade("FREE");
2870
2870
  if (downgradeResult.success) {
2871
2871
  config.tier = "FREE";
@@ -3788,7 +3788,7 @@ async function showMainMenu() {
3788
3788
  } }] : [],
3789
3789
  { key: "7", label: "Settings & Preferences", action: () => settingsMenu() },
3790
3790
  { key: "8", label: "Upgrade tier", action: async () => {
3791
- const { showUpgradeMenu } = await import("./tier-selection-426HA765.js");
3791
+ const { showUpgradeMenu } = await import("./tier-selection-XFBM4SZ4.js");
3792
3792
  await showUpgradeMenu();
3793
3793
  await showMainMenu();
3794
3794
  } },
@@ -3840,7 +3840,7 @@ async function listAtoms() {
3840
3840
  async function executeNext() {
3841
3841
  const { listLocalAtoms: listLocalAtoms2 } = await import("./plan-HCYXLSSD.js");
3842
3842
  const { analyzeProject, getComplexityDescription, getModeDescription } = await import("./orchestration-HIF3KP25.js");
3843
- const { loadExecutionPreferences } = await import("./preferences-I6WETXOI.js");
3843
+ const { loadExecutionPreferences } = await import("./preferences-OAOZCZGR.js");
3844
3844
  const cwd = process.cwd();
3845
3845
  const atoms = await listLocalAtoms2();
3846
3846
  const pendingAtoms = atoms.filter((a) => a.status === "READY" || a.status === "IN_PROGRESS");
@@ -3935,11 +3935,11 @@ async function reportBug() {
3935
3935
  }
3936
3936
  }
3937
3937
  async function viewStatus() {
3938
- const { status: status2 } = await import("./auth-HQBAG4CR.js");
3938
+ const { status: status2 } = await import("./auth-7DNVC6UX.js");
3939
3939
  await status2();
3940
3940
  }
3941
3941
  async function settingsMenu() {
3942
- const { interactiveSettings } = await import("./preferences-I6WETXOI.js");
3942
+ const { interactiveSettings } = await import("./preferences-OAOZCZGR.js");
3943
3943
  await interactiveSettings();
3944
3944
  await showMainMenu();
3945
3945
  }
@@ -3998,12 +3998,12 @@ async function reviewCode() {
3998
3998
  async function handleInSessionCommand(input) {
3999
3999
  const normalized = input.toLowerCase().trim();
4000
4000
  if (normalized === "upgrade" || normalized === "archon upgrade" || normalized === "pricing" || normalized === "archon pricing") {
4001
- const { showUpgradeMenu } = await import("./tier-selection-426HA765.js");
4001
+ const { showUpgradeMenu } = await import("./tier-selection-XFBM4SZ4.js");
4002
4002
  await showUpgradeMenu();
4003
4003
  return true;
4004
4004
  }
4005
4005
  if (normalized === "status" || normalized === "archon status") {
4006
- const { status: status2 } = await import("./auth-HQBAG4CR.js");
4006
+ const { status: status2 } = await import("./auth-7DNVC6UX.js");
4007
4007
  await status2();
4008
4008
  return true;
4009
4009
  }
@@ -4019,7 +4019,7 @@ async function handleInSessionCommand(input) {
4019
4019
  return true;
4020
4020
  }
4021
4021
  if (normalized === "keys" || normalized === "archon keys") {
4022
- const { listKeys: listKeys2 } = await import("./keys-U4QZE5YB.js");
4022
+ const { listKeys: listKeys2 } = await import("./keys-T2VPHE7Z.js");
4023
4023
  await listKeys2();
4024
4024
  return true;
4025
4025
  }
@@ -8175,11 +8175,11 @@ program.command("status").description("Show current user and project status").ac
8175
8175
  await status();
8176
8176
  });
8177
8177
  program.command("upgrade").description("Upgrade your tier (BYOK for free unlimited, or Managed plan)").action(async () => {
8178
- const { showUpgradeMenu } = await import("./tier-selection-426HA765.js");
8178
+ const { showUpgradeMenu } = await import("./tier-selection-XFBM4SZ4.js");
8179
8179
  await showUpgradeMenu();
8180
8180
  });
8181
8181
  program.command("pricing", { hidden: true }).action(async () => {
8182
- const { showUpgradeMenu } = await import("./tier-selection-426HA765.js");
8182
+ const { showUpgradeMenu } = await import("./tier-selection-XFBM4SZ4.js");
8183
8183
  await showUpgradeMenu();
8184
8184
  });
8185
8185
  program.command("init").description("Initialize ArchonDev in current project").option("--analyze", "Run enhanced analysis of codebase").option("--no-git", "Skip git initialization").action(async (options) => {
@@ -3,7 +3,7 @@ import {
3
3
  listKeys,
4
4
  removeKey,
5
5
  setPrimaryKey
6
- } from "./chunk-75J2JMU3.js";
6
+ } from "./chunk-JNFXMWBR.js";
7
7
  import "./chunk-TFSHS7EN.js";
8
8
  import "./chunk-RDG5BUED.js";
9
9
  import "./chunk-SVU7MLG6.js";
@@ -7,13 +7,13 @@ import {
7
7
  setPreference,
8
8
  showExecutionPreferences,
9
9
  showPreferences
10
- } from "./chunk-ZJXIOETW.js";
10
+ } from "./chunk-CTWVQ6F3.js";
11
11
  import "./chunk-UFR2LX6G.js";
12
12
  import "./chunk-TFSHS7EN.js";
13
13
  import "./chunk-RDG5BUED.js";
14
- import "./chunk-CZCY63EY.js";
14
+ import "./chunk-F4OUCZPN.js";
15
15
  import "./chunk-M4LGRTLC.js";
16
- import "./chunk-LBBHM4I5.js";
16
+ import "./chunk-GBYW3YAY.js";
17
17
  import "./chunk-SVU7MLG6.js";
18
18
  import "./chunk-4VNS5WPM.js";
19
19
  export {
@@ -4,7 +4,7 @@ import {
4
4
  showTierSwitchMenu,
5
5
  showUpgradeMenu,
6
6
  updateUserTier
7
- } from "./chunk-LBBHM4I5.js";
7
+ } from "./chunk-GBYW3YAY.js";
8
8
  import "./chunk-SVU7MLG6.js";
9
9
  import "./chunk-4VNS5WPM.js";
10
10
  export {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "archondev",
3
- "version": "2.19.1",
3
+ "version": "2.19.2",
4
4
  "description": "Local-first AI-powered development governance system",
5
5
  "main": "dist/index.js",
6
6
  "bin": {