@wastedcode/memex 0.1.1 → 0.1.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../src/daemon.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -12,6 +12,7 @@ import { logsCommand } from './cli/commands/logs.js';
12
12
  import { listCommand } from './cli/commands/list.js';
13
13
  import { chownCommand } from './cli/commands/chown.js';
14
14
  import { statusCommand } from './cli/commands/status.js';
15
+ import { setupTokenCommand } from './cli/commands/setup-token.js';
15
16
  const program = new Command();
16
17
  program
17
18
  .name('memex')
@@ -29,6 +30,7 @@ program.addCommand(logsCommand);
29
30
  program.addCommand(listCommand);
30
31
  program.addCommand(chownCommand);
31
32
  program.addCommand(statusCommand);
33
+ program.addCommand(setupTokenCommand);
32
34
  program.parseAsync().catch((err) => {
33
35
  console.error(err.message ?? err);
34
36
  process.exit(1);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,mEAAmE,CAAC;KAChF,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAElC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACjC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC;IAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,mEAAmE,CAAC;KAChF,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;AAChC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;AAEtC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACjC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,CAAC;IAClC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -41,8 +41,10 @@ export class NoCredentialsError extends MemexError {
41
41
  constructor(wikiId) {
42
42
  super(`No credentials configured for wiki '${wikiId}'.\n` +
43
43
  'Set credentials with:\n' +
44
- ` memex login ${wikiId} (OAuth)\n` +
45
- ` memex config ${wikiId} --set-key (API key)`, 'NO_CREDENTIALS', 400);
44
+ ` memex setup-token <token> (global, all wikis)\n` +
45
+ ` memex login ${wikiId} --token <token> (per-wiki)\n` +
46
+ ` memex login ${wikiId} (copy ~/.claude credentials)\n` +
47
+ '\nGenerate a token by running: claude setup-token', 'NO_CREDENTIALS', 400);
46
48
  }
47
49
  }
48
50
  export class ForbiddenError extends MemexError {
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,UAAW,SAAQ,KAAK;IAG1B;IACA;IAHT,YACE,OAAe,EACR,IAAY,EACZ,aAAqB,GAAG;QAE/B,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,SAAI,GAAJ,IAAI,CAAQ;QACZ,eAAU,GAAV,UAAU,CAAc;QAG/B,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,UAAU;IAC/C,YAAY,MAAc;QACxB,KAAK,CAAC,SAAS,MAAM,aAAa,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC;IAC7D,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,UAAU;IAC7C,YAAY,MAAc;QACxB,KAAK,CAAC,SAAS,MAAM,kBAAkB,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC;IAC/D,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,UAAU;IAC9C,YAAY,KAAa;QACvB,KAAK,CAAC,QAAQ,KAAK,YAAY,EAAE,eAAe,EAAE,GAAG,CAAC,CAAC;IACzD,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,UAAU;IAC5C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,UAAU;IAC7C;QACE,KAAK,CACH,4DAA4D;YAC5D,YAAY;YACZ,iDAAiD;YACjD,2DAA2D;YAC3D,mEAAmE,EACnE,kBAAkB,EAClB,GAAG,CACJ,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,UAAU;IAChD,YAAY,MAAc;QACxB,KAAK,CACH,uCAAuC,MAAM,MAAM;YACnD,yBAAyB;YACzB,iBAAiB,MAAM,qBAAqB;YAC5C,kBAAkB,MAAM,uBAAuB,EAC/C,gBAAgB,EAChB,GAAG,CACJ,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,UAAU;IAC5C,YAAY,MAAc;QACxB,KAAK,CAAC,0BAA0B,MAAM,GAAG,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;IAC/D,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,UAAU;IAC7C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,UAAU;IACnD;QACE,KAAK,CACH,mCAAmC;YACnC,4BAA4B,EAC5B,oBAAoB,EACpB,GAAG,CACJ,CAAC;IACJ,CAAC;CACF"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,UAAW,SAAQ,KAAK;IAG1B;IACA;IAHT,YACE,OAAe,EACR,IAAY,EACZ,aAAqB,GAAG;QAE/B,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,SAAI,GAAJ,IAAI,CAAQ;QACZ,eAAU,GAAV,UAAU,CAAc;QAG/B,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,UAAU;IAC/C,YAAY,MAAc;QACxB,KAAK,CAAC,SAAS,MAAM,aAAa,EAAE,gBAAgB,EAAE,GAAG,CAAC,CAAC;IAC7D,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,UAAU;IAC7C,YAAY,MAAc;QACxB,KAAK,CAAC,SAAS,MAAM,kBAAkB,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC;IAC/D,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,UAAU;IAC9C,YAAY,KAAa;QACvB,KAAK,CAAC,QAAQ,KAAK,YAAY,EAAE,eAAe,EAAE,GAAG,CAAC,CAAC;IACzD,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,UAAU;IAC5C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,UAAU;IAC7C;QACE,KAAK,CACH,4DAA4D;YAC5D,YAAY;YACZ,iDAAiD;YACjD,2DAA2D;YAC3D,mEAAmE,EACnE,kBAAkB,EAClB,GAAG,CACJ,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,kBAAmB,SAAQ,UAAU;IAChD,YAAY,MAAc;QACxB,KAAK,CACH,uCAAuC,MAAM,MAAM;YACnD,yBAAyB;YACzB,iEAAiE;YACjE,iBAAiB,MAAM,kCAAkC;YACzD,iBAAiB,MAAM,oDAAoD;YAC3E,mDAAmD,EACnD,gBAAgB,EAChB,GAAG,CACJ,CAAC;IACJ,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,UAAU;IAC5C,YAAY,MAAc;QACxB,KAAK,CAAC,0BAA0B,MAAM,GAAG,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;IAC/D,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,UAAU;IAC7C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,CAAC,CAAC;IAC1C,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,UAAU;IACnD;QACE,KAAK,CACH,mCAAmC;YACnC,4BAA4B,EAC5B,oBAAoB,EACpB,GAAG,CACJ,CAAC;IACJ,CAAC;CACF"}
@@ -253,8 +253,11 @@ var init_errors = __esm({
253
253
  super(
254
254
  `No credentials configured for wiki '${wikiId}'.
255
255
  Set credentials with:
256
- memex login ${wikiId} (OAuth)
257
- memex config ${wikiId} --set-key (API key)`,
256
+ memex setup-token <token> (global, all wikis)
257
+ memex login ${wikiId} --token <token> (per-wiki)
258
+ memex login ${wikiId} (copy ~/.claude credentials)
259
+
260
+ Generate a token by running: claude setup-token`,
258
261
  "NO_CREDENTIALS",
259
262
  400
260
263
  );
@@ -568,36 +571,37 @@ Chronological record of knowledge base activity.
568
571
  // src/daemon/auth.ts
569
572
  import { existsSync as existsSync3, readFileSync as readFileSync2, writeFileSync as writeFileSync2, mkdirSync as mkdirSync3 } from "node:fs";
570
573
  import { join as join3 } from "node:path";
571
- var AuthManager;
574
+ var GLOBAL_TOKEN_PATH, AuthManager;
572
575
  var init_auth = __esm({
573
576
  "src/daemon/auth.ts"() {
574
577
  "use strict";
575
578
  init_constants();
576
579
  init_errors();
580
+ GLOBAL_TOKEN_PATH = join3(DATA_DIR, ".oauth-token");
577
581
  AuthManager = class {
578
- constructor(wikisDir = WIKIS_DIR, globalApiKey) {
582
+ constructor(wikisDir = WIKIS_DIR) {
579
583
  this.wikisDir = wikisDir;
580
- this.globalApiKey = globalApiKey;
584
+ this.globalOAuthToken = this.loadGlobalToken();
581
585
  }
582
586
  wikisDir;
583
- globalApiKey;
587
+ globalOAuthToken;
584
588
  /**
585
589
  * Resolve credentials for a wiki, returning environment variables
586
590
  * to set on the claude child process.
587
591
  *
588
592
  * Priority:
589
- * 1. Per-wiki API key file (.claude/api-key)
593
+ * 1. Per-wiki OAuth token file (.claude/oauth-token)
590
594
  * 2. Per-wiki OAuth credentials (.claude/.credentials.json exists)
591
- * 3. Global ANTHROPIC_API_KEY from daemon environment
595
+ * 3. Global OAuth token (from `memex setup-token`)
592
596
  */
593
597
  resolveCredentials(wikiId) {
594
598
  const claudeDir = this.configDir(wikiId);
595
- const apiKeyPath = join3(claudeDir, "api-key");
596
- if (existsSync3(apiKeyPath)) {
597
- const key = readFileSync2(apiKeyPath, "utf-8").trim();
598
- if (key) {
599
+ const tokenPath = join3(claudeDir, "oauth-token");
600
+ if (existsSync3(tokenPath)) {
601
+ const token = readFileSync2(tokenPath, "utf-8").trim();
602
+ if (token) {
599
603
  return {
600
- ANTHROPIC_API_KEY: key,
604
+ CLAUDE_CODE_OAUTH_TOKEN: token,
601
605
  CLAUDE_CONFIG_DIR: claudeDir
602
606
  };
603
607
  }
@@ -608,22 +612,38 @@ var init_auth = __esm({
608
612
  CLAUDE_CONFIG_DIR: claudeDir
609
613
  };
610
614
  }
611
- if (this.globalApiKey) {
615
+ if (this.globalOAuthToken) {
612
616
  return {
613
- ANTHROPIC_API_KEY: this.globalApiKey,
617
+ CLAUDE_CODE_OAUTH_TOKEN: this.globalOAuthToken,
614
618
  CLAUDE_CONFIG_DIR: claudeDir
615
619
  };
616
620
  }
617
621
  throw new NoCredentialsError(wikiId);
618
622
  }
619
623
  /**
620
- * Store an API key for a wiki.
624
+ * Store and activate a global OAuth token (from `claude setup-token`).
625
+ * This is the daemon-wide fallback used when a wiki has no per-wiki credentials.
626
+ */
627
+ setGlobalToken(token) {
628
+ const trimmed = token.trim();
629
+ mkdirSync3(DATA_DIR, { recursive: true });
630
+ writeFileSync2(GLOBAL_TOKEN_PATH, trimmed, { mode: 384 });
631
+ this.globalOAuthToken = trimmed;
632
+ }
633
+ /**
634
+ * Check if a global OAuth token is configured.
621
635
  */
622
- setApiKey(wikiId, key) {
636
+ hasGlobalToken() {
637
+ return !!this.globalOAuthToken;
638
+ }
639
+ /**
640
+ * Store an OAuth token for a specific wiki.
641
+ */
642
+ setWikiToken(wikiId, token) {
623
643
  const claudeDir = this.configDir(wikiId);
624
644
  mkdirSync3(claudeDir, { recursive: true, mode: 448 });
625
- const apiKeyPath = join3(claudeDir, "api-key");
626
- writeFileSync2(apiKeyPath, key.trim(), { mode: 384 });
645
+ const tokenPath = join3(claudeDir, "oauth-token");
646
+ writeFileSync2(tokenPath, token.trim(), { mode: 384 });
627
647
  }
628
648
  /**
629
649
  * Get the CLAUDE_CONFIG_DIR path for a wiki.
@@ -645,9 +665,17 @@ var init_auth = __esm({
645
665
  */
646
666
  hasCredentials(wikiId) {
647
667
  const claudeDir = this.configDir(wikiId);
648
- const apiKeyPath = join3(claudeDir, "api-key");
668
+ const tokenPath = join3(claudeDir, "oauth-token");
649
669
  const credsPath = join3(claudeDir, ".credentials.json");
650
- return existsSync3(apiKeyPath) || existsSync3(credsPath) || !!this.globalApiKey;
670
+ return existsSync3(tokenPath) || existsSync3(credsPath) || !!this.globalOAuthToken;
671
+ }
672
+ // ── Private ────────────────────────────────────────────────────────────
673
+ loadGlobalToken() {
674
+ if (existsSync3(GLOBAL_TOKEN_PATH)) {
675
+ const token = readFileSync2(GLOBAL_TOKEN_PATH, "utf-8").trim();
676
+ if (token) return token;
677
+ }
678
+ return void 0;
651
679
  }
652
680
  };
653
681
  }
@@ -968,6 +996,9 @@ var init_runner = __esm({
968
996
  if (credEnv["CLAUDE_CONFIG_DIR"]) {
969
997
  env["CLAUDE_CONFIG_DIR"] = `${WORKSPACE_MOUNT}/.claude`;
970
998
  }
999
+ if (credEnv["CLAUDE_CODE_OAUTH_TOKEN"]) {
1000
+ env["CLAUDE_CODE_OAUTH_TOKEN"] = credEnv["CLAUDE_CODE_OAUTH_TOKEN"];
1001
+ }
971
1002
  return new Promise((resolve) => {
972
1003
  const child = spawn(wrapped.command, wrapped.args, {
973
1004
  env,
@@ -1245,7 +1276,8 @@ var init_routes = __esm({
1245
1276
  { method: "DELETE", pattern: /^\/wikis\/(?<id>[^/]+)$/, handler: this.destroyWiki.bind(this) },
1246
1277
  { method: "PUT", pattern: /^\/wikis\/(?<id>[^/]+)\/config$/, handler: this.updateConfig.bind(this) },
1247
1278
  { method: "POST", pattern: /^\/wikis\/(?<id>[^/]+)\/chown$/, handler: this.chownWiki.bind(this) },
1248
- { method: "POST", pattern: /^\/wikis\/(?<id>[^/]+)\/api-key$/, handler: this.setApiKey.bind(this) },
1279
+ { method: "POST", pattern: /^\/auth\/token$/, handler: this.setGlobalToken.bind(this) },
1280
+ { method: "POST", pattern: /^\/wikis\/(?<id>[^/]+)\/token$/, handler: this.setWikiToken.bind(this) },
1249
1281
  { method: "POST", pattern: /^\/wikis\/(?<id>[^/]+)\/credentials$/, handler: this.setCredentials.bind(this) },
1250
1282
  { method: "POST", pattern: /^\/wikis\/(?<id>[^/]+)\/jobs$/, handler: this.submitJob.bind(this) },
1251
1283
  { method: "GET", pattern: /^\/wikis\/(?<id>[^/]+)\/jobs\/(?<jobId>\d+)$/, handler: this.getJob.bind(this) },
@@ -1355,16 +1387,31 @@ var init_routes = __esm({
1355
1387
  return { status: 200, body: { ok: true, data: wiki } };
1356
1388
  }
1357
1389
  // ── Auth ─────────────────────────────────────────────────────────────────
1358
- async setApiKey(params, body, ctx) {
1390
+ async setGlobalToken(_params, body, _ctx) {
1391
+ const b = requireBody(body);
1392
+ const token = b.token;
1393
+ if (!token || typeof token !== "string") {
1394
+ throw new ValidationError("token (string) is required");
1395
+ }
1396
+ if (!token.startsWith("sk-ant-oat01-")) {
1397
+ throw new ValidationError("Token must be a Claude OAuth token (sk-ant-oat01-...)");
1398
+ }
1399
+ this.auth.setGlobalToken(token);
1400
+ return { status: 200, body: { ok: true } };
1401
+ }
1402
+ async setWikiToken(params, body, ctx) {
1359
1403
  const wikiId = params["id"];
1360
1404
  this.requireWiki(wikiId, ctx.callerUid);
1361
1405
  const b = requireBody(body);
1362
- const key = b.key;
1363
- if (!key || typeof key !== "string") {
1364
- throw new ValidationError("API key is required");
1406
+ const token = b.token;
1407
+ if (!token || typeof token !== "string") {
1408
+ throw new ValidationError("token (string) is required");
1365
1409
  }
1366
- this.auth.setApiKey(wikiId, key);
1367
- this.db.logAudit(wikiId, "wiki.api_key_set");
1410
+ if (!token.startsWith("sk-ant-oat01-")) {
1411
+ throw new ValidationError("Token must be a Claude OAuth token (sk-ant-oat01-...)");
1412
+ }
1413
+ this.auth.setWikiToken(wikiId, token);
1414
+ this.db.logAudit(wikiId, "wiki.oauth_token_set");
1368
1415
  return { status: 200, body: { ok: true } };
1369
1416
  }
1370
1417
  async setCredentials(params, body, ctx) {
@@ -1659,7 +1706,7 @@ async function startDaemon() {
1659
1706
  namespace.checkCapabilities();
1660
1707
  namespace.ensureDirectories();
1661
1708
  const scaffold = new WikiScaffold(WIKIS_DIR);
1662
- const auth = new AuthManager(WIKIS_DIR, process.env["ANTHROPIC_API_KEY"]);
1709
+ const auth = new AuthManager(WIKIS_DIR);
1663
1710
  const runner = new ClaudeRunner(namespace, auth, db, WIKIS_DIR);
1664
1711
  const queue = new QueueManager(db, runner, AUTO_LINT_INTERVAL);
1665
1712
  const routes = new RouteHandler(db, scaffold, namespace, queue, auth);
@@ -1699,7 +1746,7 @@ var init_daemon = __esm({
1699
1746
  });
1700
1747
 
1701
1748
  // src/index.ts
1702
- import { Command as Command13 } from "commander";
1749
+ import { Command as Command14 } from "commander";
1703
1750
 
1704
1751
  // src/cli/commands/serve.ts
1705
1752
  import { Command } from "commander";
@@ -1844,8 +1891,11 @@ var MemexClient = class {
1844
1891
  chownWiki(wikiId, uid) {
1845
1892
  return this.request("POST", `/wikis/${wikiId}/chown`, { uid });
1846
1893
  }
1847
- setApiKey(wikiId, key) {
1848
- return this.request("POST", `/wikis/${wikiId}/api-key`, { key });
1894
+ setGlobalToken(token) {
1895
+ return this.request("POST", "/auth/token", { token });
1896
+ }
1897
+ setWikiToken(wikiId, token) {
1898
+ return this.request("POST", `/wikis/${wikiId}/token`, { token });
1849
1899
  }
1850
1900
  setCredentials(wikiId, credentials) {
1851
1901
  return this.request("POST", `/wikis/${wikiId}/credentials`, { credentials });
@@ -1958,7 +2008,7 @@ import { createInterface as createInterface2 } from "node:readline";
1958
2008
  import { execFileSync as execFileSync2 } from "node:child_process";
1959
2009
  init_constants();
1960
2010
  import { join as join5 } from "node:path";
1961
- var configCommand = new Command4("config").description("Configure a wiki").argument("<wikiId>", "Wiki to configure").option("--edit", "Open .claude.md in $EDITOR").option("--set-key", "Set the API key for this wiki").option("--model <model>", "Set the default model (e.g., sonnet, opus, haiku)").option("--allowed-tools <tools>", "Set allowed tools (comma-separated, e.g., WebSearch,WebFetch)").option("--list-tools", "Show available tools and current configuration").action(async (wikiId, opts) => {
2011
+ var configCommand = new Command4("config").description("Configure a wiki").argument("<wikiId>", "Wiki to configure").option("--edit", "Open .claude.md in $EDITOR").option("--set-token", "Set an OAuth token for this wiki (from `claude setup-token`)").option("--model <model>", "Set the default model (e.g., sonnet, opus, haiku)").option("--allowed-tools <tools>", "Set allowed tools (comma-separated, e.g., WebSearch,WebFetch)").option("--list-tools", "Show available tools and current configuration").action(async (wikiId, opts) => {
1962
2012
  const client = new MemexClient();
1963
2013
  const wikiResp = await client.getWiki(wikiId);
1964
2014
  if (!wikiResp.ok) {
@@ -1977,14 +2027,20 @@ var configCommand = new Command4("config").description("Configure a wiki").argum
1977
2027
  }
1978
2028
  return;
1979
2029
  }
1980
- if (opts.setKey) {
1981
- const key = await promptSecret("API key: ");
1982
- const resp = await client.setApiKey(wikiId, key);
2030
+ if (opts.setToken) {
2031
+ const token = await promptSecret("OAuth token (from `claude setup-token`): ");
2032
+ if (!token.startsWith("sk-ant-oat01-")) {
2033
+ console.error(`Error: Token must start with 'sk-ant-oat01-'.`);
2034
+ console.error(`
2035
+ Generate one by running: claude setup-token`);
2036
+ process.exit(1);
2037
+ }
2038
+ const resp = await client.setWikiToken(wikiId, token);
1983
2039
  if (!resp.ok) {
1984
2040
  console.error(`Error: ${resp.error}`);
1985
2041
  process.exit(1);
1986
2042
  }
1987
- console.log(`API key set for '${wikiId}'`);
2043
+ console.log(`OAuth token set for '${wikiId}'`);
1988
2044
  return;
1989
2045
  }
1990
2046
  if (opts.listTools) {
@@ -2070,27 +2126,36 @@ import { readFileSync as readFileSync5, existsSync as existsSync6 } from "node:f
2070
2126
  import { join as join6 } from "node:path";
2071
2127
  import { homedir } from "node:os";
2072
2128
  var DEFAULT_CREDS_PATH = join6(homedir(), ".claude", ".credentials.json");
2073
- var loginCommand = new Command5("login").description("Copy Claude credentials into a wiki").argument("<wikiId>", "Wiki to authenticate").option("--credentials <path>", "Path to .credentials.json", DEFAULT_CREDS_PATH).option("--api-key <key>", "Use an API key instead of OAuth credentials").action(async (wikiId, opts) => {
2129
+ var loginCommand = new Command5("login").description("Copy Claude credentials into a wiki").argument("<wikiId>", "Wiki to authenticate").option("--credentials <path>", "Path to .credentials.json", DEFAULT_CREDS_PATH).option("--token <token>", "Use an OAuth token from `claude setup-token`").action(async (wikiId, opts) => {
2074
2130
  const client = new MemexClient();
2075
2131
  const wikiResp = await client.getWiki(wikiId);
2076
2132
  if (!wikiResp.ok) {
2077
2133
  console.error(`Error: ${wikiResp.error}`);
2078
2134
  process.exit(1);
2079
2135
  }
2080
- if (opts.apiKey) {
2081
- const resp2 = await client.setApiKey(wikiId, opts.apiKey);
2136
+ if (opts.token) {
2137
+ if (!opts.token.startsWith("sk-ant-oat01-")) {
2138
+ console.error(`Error: Token must start with 'sk-ant-oat01-'.`);
2139
+ console.error(`
2140
+ Generate one by running: claude setup-token`);
2141
+ process.exit(1);
2142
+ }
2143
+ const resp2 = await client.setWikiToken(wikiId, opts.token);
2082
2144
  if (!resp2.ok) {
2083
2145
  console.error(`Error: ${resp2.error}`);
2084
2146
  process.exit(1);
2085
2147
  }
2086
- console.log(`API key stored for wiki '${wikiId}'.`);
2148
+ console.log(`OAuth token stored for wiki '${wikiId}'.`);
2087
2149
  return;
2088
2150
  }
2089
2151
  const credsPath = opts.credentials;
2090
2152
  if (!existsSync6(credsPath)) {
2091
2153
  console.error(`Error: Credentials file not found: ${credsPath}`);
2092
2154
  console.error(`
2093
- Run 'claude auth login' first, or pass --credentials <path>`);
2155
+ Options:`);
2156
+ console.error(` 1. Run 'claude auth login' first, then re-run this command`);
2157
+ console.error(` 2. Run 'claude setup-token' and use: memex login ${wikiId} --token <token>`);
2158
+ console.error(` 3. Set globally: memex setup-token <token>`);
2094
2159
  process.exit(1);
2095
2160
  }
2096
2161
  const credentials = readFileSync5(credsPath, "utf-8");
@@ -2380,8 +2445,42 @@ function padRow2(id, type, status, created) {
2380
2445
  return `${id.padEnd(8)} ${type.padEnd(10)} ${status.padEnd(12)} ${created}`;
2381
2446
  }
2382
2447
 
2448
+ // src/cli/commands/setup-token.ts
2449
+ import { Command as Command13 } from "commander";
2450
+ var TOKEN_PREFIX = "sk-ant-oat01-";
2451
+ var setupTokenCommand = new Command13("setup-token").description("Store a long-lived OAuth token from `claude setup-token` for all wikis").argument("<token>", "OAuth token (sk-ant-oat01-...)").option("--wiki <wikiId>", "Store for a specific wiki only (instead of globally)").action(async (token, opts) => {
2452
+ if (!token.startsWith(TOKEN_PREFIX)) {
2453
+ console.error(`Error: Token must start with '${TOKEN_PREFIX}'.`);
2454
+ console.error(`
2455
+ Generate one by running: claude setup-token`);
2456
+ process.exit(1);
2457
+ }
2458
+ const client = new MemexClient();
2459
+ if (opts.wiki) {
2460
+ const wikiResp = await client.getWiki(opts.wiki);
2461
+ if (!wikiResp.ok) {
2462
+ console.error(`Error: ${wikiResp.error}`);
2463
+ process.exit(1);
2464
+ }
2465
+ const resp = await client.setWikiToken(opts.wiki, token);
2466
+ if (!resp.ok) {
2467
+ console.error(`Error: ${resp.error}`);
2468
+ process.exit(1);
2469
+ }
2470
+ console.log(`OAuth token stored for wiki '${opts.wiki}'.`);
2471
+ } else {
2472
+ const resp = await client.setGlobalToken(token);
2473
+ if (!resp.ok) {
2474
+ console.error(`Error: ${resp.error}`);
2475
+ process.exit(1);
2476
+ }
2477
+ console.log("Global OAuth token stored.");
2478
+ console.log("All wikis without per-wiki credentials will use this token.");
2479
+ }
2480
+ });
2481
+
2383
2482
  // src/index.ts
2384
- var program = new Command13();
2483
+ var program = new Command14();
2385
2484
  program.name("memex").description("Isolated, queued claude -p runtime for persistent knowledge bases").version("0.1.0");
2386
2485
  program.addCommand(serveCommand);
2387
2486
  program.addCommand(createCommand);
@@ -2395,6 +2494,7 @@ program.addCommand(logsCommand);
2395
2494
  program.addCommand(listCommand);
2396
2495
  program.addCommand(chownCommand);
2397
2496
  program.addCommand(statusCommand);
2497
+ program.addCommand(setupTokenCommand);
2398
2498
  program.parseAsync().catch((err) => {
2399
2499
  console.error(err.message ?? err);
2400
2500
  process.exit(1);