openplanter 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/README.md +210 -0
  2. package/dist/builder.d.ts +11 -0
  3. package/dist/builder.d.ts.map +1 -0
  4. package/dist/builder.js +179 -0
  5. package/dist/builder.js.map +1 -0
  6. package/dist/cli.d.ts +9 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +548 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/config.d.ts +51 -0
  11. package/dist/config.d.ts.map +1 -0
  12. package/dist/config.js +114 -0
  13. package/dist/config.js.map +1 -0
  14. package/dist/credentials.d.ts +52 -0
  15. package/dist/credentials.d.ts.map +1 -0
  16. package/dist/credentials.js +371 -0
  17. package/dist/credentials.js.map +1 -0
  18. package/dist/demo.d.ts +26 -0
  19. package/dist/demo.d.ts.map +1 -0
  20. package/dist/demo.js +95 -0
  21. package/dist/demo.js.map +1 -0
  22. package/dist/engine.d.ts +91 -0
  23. package/dist/engine.d.ts.map +1 -0
  24. package/dist/engine.js +1036 -0
  25. package/dist/engine.js.map +1 -0
  26. package/dist/index.d.ts +30 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +39 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/investigation-tools/aph-holdings.d.ts +61 -0
  31. package/dist/investigation-tools/aph-holdings.d.ts.map +1 -0
  32. package/dist/investigation-tools/aph-holdings.js +459 -0
  33. package/dist/investigation-tools/aph-holdings.js.map +1 -0
  34. package/dist/investigation-tools/asic-officer-lookup.d.ts +42 -0
  35. package/dist/investigation-tools/asic-officer-lookup.d.ts.map +1 -0
  36. package/dist/investigation-tools/asic-officer-lookup.js +197 -0
  37. package/dist/investigation-tools/asic-officer-lookup.js.map +1 -0
  38. package/dist/investigation-tools/asx-calendar-fetcher.d.ts +42 -0
  39. package/dist/investigation-tools/asx-calendar-fetcher.d.ts.map +1 -0
  40. package/dist/investigation-tools/asx-calendar-fetcher.js +271 -0
  41. package/dist/investigation-tools/asx-calendar-fetcher.js.map +1 -0
  42. package/dist/investigation-tools/asx-parser.d.ts +66 -0
  43. package/dist/investigation-tools/asx-parser.d.ts.map +1 -0
  44. package/dist/investigation-tools/asx-parser.js +314 -0
  45. package/dist/investigation-tools/asx-parser.js.map +1 -0
  46. package/dist/investigation-tools/bulk-asx-announcements.d.ts +53 -0
  47. package/dist/investigation-tools/bulk-asx-announcements.d.ts.map +1 -0
  48. package/dist/investigation-tools/bulk-asx-announcements.js +204 -0
  49. package/dist/investigation-tools/bulk-asx-announcements.js.map +1 -0
  50. package/dist/investigation-tools/entity-resolver.d.ts +77 -0
  51. package/dist/investigation-tools/entity-resolver.d.ts.map +1 -0
  52. package/dist/investigation-tools/entity-resolver.js +346 -0
  53. package/dist/investigation-tools/entity-resolver.js.map +1 -0
  54. package/dist/investigation-tools/hotcopper-scraper.d.ts +73 -0
  55. package/dist/investigation-tools/hotcopper-scraper.d.ts.map +1 -0
  56. package/dist/investigation-tools/hotcopper-scraper.js +318 -0
  57. package/dist/investigation-tools/hotcopper-scraper.js.map +1 -0
  58. package/dist/investigation-tools/index.d.ts +15 -0
  59. package/dist/investigation-tools/index.d.ts.map +1 -0
  60. package/dist/investigation-tools/index.js +15 -0
  61. package/dist/investigation-tools/index.js.map +1 -0
  62. package/dist/investigation-tools/insider-graph.d.ts +173 -0
  63. package/dist/investigation-tools/insider-graph.d.ts.map +1 -0
  64. package/dist/investigation-tools/insider-graph.js +732 -0
  65. package/dist/investigation-tools/insider-graph.js.map +1 -0
  66. package/dist/investigation-tools/insider-suspicion-scorer.d.ts +97 -0
  67. package/dist/investigation-tools/insider-suspicion-scorer.d.ts.map +1 -0
  68. package/dist/investigation-tools/insider-suspicion-scorer.js +327 -0
  69. package/dist/investigation-tools/insider-suspicion-scorer.js.map +1 -0
  70. package/dist/investigation-tools/multi-forum-scraper.d.ts +104 -0
  71. package/dist/investigation-tools/multi-forum-scraper.d.ts.map +1 -0
  72. package/dist/investigation-tools/multi-forum-scraper.js +415 -0
  73. package/dist/investigation-tools/multi-forum-scraper.js.map +1 -0
  74. package/dist/investigation-tools/price-fetcher.d.ts +81 -0
  75. package/dist/investigation-tools/price-fetcher.d.ts.map +1 -0
  76. package/dist/investigation-tools/price-fetcher.js +268 -0
  77. package/dist/investigation-tools/price-fetcher.js.map +1 -0
  78. package/dist/investigation-tools/shared.d.ts +39 -0
  79. package/dist/investigation-tools/shared.d.ts.map +1 -0
  80. package/dist/investigation-tools/shared.js +203 -0
  81. package/dist/investigation-tools/shared.js.map +1 -0
  82. package/dist/investigation-tools/timeline-linker.d.ts +90 -0
  83. package/dist/investigation-tools/timeline-linker.d.ts.map +1 -0
  84. package/dist/investigation-tools/timeline-linker.js +219 -0
  85. package/dist/investigation-tools/timeline-linker.js.map +1 -0
  86. package/dist/investigation-tools/volume-scanner.d.ts +70 -0
  87. package/dist/investigation-tools/volume-scanner.d.ts.map +1 -0
  88. package/dist/investigation-tools/volume-scanner.js +227 -0
  89. package/dist/investigation-tools/volume-scanner.js.map +1 -0
  90. package/dist/model.d.ts +136 -0
  91. package/dist/model.d.ts.map +1 -0
  92. package/dist/model.js +1071 -0
  93. package/dist/model.js.map +1 -0
  94. package/dist/patching.d.ts +45 -0
  95. package/dist/patching.d.ts.map +1 -0
  96. package/dist/patching.js +317 -0
  97. package/dist/patching.js.map +1 -0
  98. package/dist/prompts.d.ts +15 -0
  99. package/dist/prompts.d.ts.map +1 -0
  100. package/dist/prompts.js +351 -0
  101. package/dist/prompts.js.map +1 -0
  102. package/dist/replay-log.d.ts +54 -0
  103. package/dist/replay-log.d.ts.map +1 -0
  104. package/dist/replay-log.js +94 -0
  105. package/dist/replay-log.js.map +1 -0
  106. package/dist/runtime.d.ts +53 -0
  107. package/dist/runtime.d.ts.map +1 -0
  108. package/dist/runtime.js +259 -0
  109. package/dist/runtime.js.map +1 -0
  110. package/dist/settings.d.ts +39 -0
  111. package/dist/settings.d.ts.map +1 -0
  112. package/dist/settings.js +146 -0
  113. package/dist/settings.js.map +1 -0
  114. package/dist/tool-defs.d.ts +58 -0
  115. package/dist/tool-defs.d.ts.map +1 -0
  116. package/dist/tool-defs.js +1029 -0
  117. package/dist/tool-defs.js.map +1 -0
  118. package/dist/tools.d.ts +72 -0
  119. package/dist/tools.d.ts.map +1 -0
  120. package/dist/tools.js +1454 -0
  121. package/dist/tools.js.map +1 -0
  122. package/dist/tui.d.ts +49 -0
  123. package/dist/tui.d.ts.map +1 -0
  124. package/dist/tui.js +699 -0
  125. package/dist/tui.js.map +1 -0
  126. package/package.json +126 -0
package/dist/config.js ADDED
@@ -0,0 +1,114 @@
1
+ /**
2
+ * Agent configuration – migrated from agent/config.py.
3
+ *
4
+ * Provides the AgentConfig interface and factory method for reading
5
+ * configuration from environment variables.
6
+ */
7
+ import * as path from "node:path";
8
+ import * as os from "node:os";
9
+ // ---------------------------------------------------------------------------
10
+ // Provider default models
11
+ // ---------------------------------------------------------------------------
12
+ export const PROVIDER_DEFAULT_MODELS = {
13
+ openai: "gpt-5.2",
14
+ anthropic: "claude-opus-4-6",
15
+ openrouter: "anthropic/claude-sonnet-4-5",
16
+ cerebras: "qwen-3-235b-a22b-instruct-2507",
17
+ grok: "grok-4-1-fast-reasoning",
18
+ };
19
+ // ---------------------------------------------------------------------------
20
+ // Helper: resolve ~ and make absolute
21
+ // ---------------------------------------------------------------------------
22
+ function _resolveWorkspace(workspace) {
23
+ let ws = workspace;
24
+ if (ws.startsWith("~")) {
25
+ ws = path.join(os.homedir(), ws.slice(1));
26
+ }
27
+ return path.resolve(ws);
28
+ }
29
+ // ---------------------------------------------------------------------------
30
+ // Factory
31
+ // ---------------------------------------------------------------------------
32
+ /**
33
+ * Build an AgentConfig from environment variables, mirroring the Python
34
+ * ``AgentConfig.from_env()`` classmethod.
35
+ */
36
+ export function agentConfigFromEnv(workspace) {
37
+ const ws = _resolveWorkspace(workspace);
38
+ const openaiApiKey = process.env["OPENPLANTER_OPENAI_API_KEY"] ??
39
+ process.env["OPENAI_API_KEY"] ??
40
+ null;
41
+ const anthropicApiKey = process.env["OPENPLANTER_ANTHROPIC_API_KEY"] ??
42
+ process.env["ANTHROPIC_API_KEY"] ??
43
+ null;
44
+ const openrouterApiKey = process.env["OPENPLANTER_OPENROUTER_API_KEY"] ??
45
+ process.env["OPENROUTER_API_KEY"] ??
46
+ null;
47
+ const cerebrasApiKey = process.env["OPENPLANTER_CEREBRAS_API_KEY"] ??
48
+ process.env["CEREBRAS_API_KEY"] ??
49
+ null;
50
+ const grokApiKey = process.env["OPENPLANTER_GROK_API_KEY"] ??
51
+ process.env["XAI_API_KEY"] ??
52
+ process.env["GROK_API_KEY"] ??
53
+ null;
54
+ const exaApiKey = process.env["OPENPLANTER_EXA_API_KEY"] ??
55
+ process.env["EXA_API_KEY"] ??
56
+ null;
57
+ const voyageApiKey = process.env["OPENPLANTER_VOYAGE_API_KEY"] ??
58
+ process.env["VOYAGE_API_KEY"] ??
59
+ null;
60
+ const openaiBaseUrl = process.env["OPENPLANTER_OPENAI_BASE_URL"] ??
61
+ process.env["OPENPLANTER_BASE_URL"] ??
62
+ "https://api.openai.com/v1";
63
+ const _parseBool = (envVar, fallback) => {
64
+ const raw = (process.env[envVar] ?? "").trim().toLowerCase();
65
+ if (!raw)
66
+ return fallback;
67
+ return ["1", "true", "yes"].includes(raw);
68
+ };
69
+ return {
70
+ workspace: ws,
71
+ provider: (process.env["OPENPLANTER_PROVIDER"] ?? "auto").trim().toLowerCase() ||
72
+ "auto",
73
+ model: process.env["OPENPLANTER_MODEL"] ?? "claude-opus-4-6",
74
+ reasoningEffort: (process.env["OPENPLANTER_REASONING_EFFORT"] ?? "high")
75
+ .trim()
76
+ .toLowerCase() || null,
77
+ baseUrl: openaiBaseUrl,
78
+ apiKey: openaiApiKey,
79
+ openaiBaseUrl,
80
+ anthropicBaseUrl: process.env["OPENPLANTER_ANTHROPIC_BASE_URL"] ??
81
+ "https://api.anthropic.com/v1",
82
+ openrouterBaseUrl: process.env["OPENPLANTER_OPENROUTER_BASE_URL"] ??
83
+ "https://openrouter.ai/api/v1",
84
+ cerebrasBaseUrl: process.env["OPENPLANTER_CEREBRAS_BASE_URL"] ??
85
+ "https://api.cerebras.ai/v1",
86
+ grokBaseUrl: process.env["OPENPLANTER_GROK_BASE_URL"] ?? "https://api.x.ai/v1",
87
+ exaBaseUrl: process.env["OPENPLANTER_EXA_BASE_URL"] ?? "https://api.exa.ai",
88
+ openaiApiKey,
89
+ anthropicApiKey,
90
+ openrouterApiKey,
91
+ cerebrasApiKey,
92
+ grokApiKey,
93
+ exaApiKey,
94
+ voyageApiKey,
95
+ maxDepth: parseInt(process.env["OPENPLANTER_MAX_DEPTH"] ?? "4", 10),
96
+ maxStepsPerCall: parseInt(process.env["OPENPLANTER_MAX_STEPS"] ?? "100", 10),
97
+ maxObservationChars: parseInt(process.env["OPENPLANTER_MAX_OBS_CHARS"] ?? "6000", 10),
98
+ commandTimeoutSec: parseInt(process.env["OPENPLANTER_CMD_TIMEOUT"] ?? "45", 10),
99
+ shell: process.env["OPENPLANTER_SHELL"] ?? "/bin/sh",
100
+ maxFilesListed: parseInt(process.env["OPENPLANTER_MAX_FILES"] ?? "400", 10),
101
+ maxFileChars: parseInt(process.env["OPENPLANTER_MAX_FILE_CHARS"] ?? "20000", 10),
102
+ maxSearchHits: parseInt(process.env["OPENPLANTER_MAX_SEARCH_HITS"] ?? "200", 10),
103
+ maxShellOutputChars: parseInt(process.env["OPENPLANTER_MAX_SHELL_CHARS"] ?? "16000", 10),
104
+ sessionRootDir: process.env["OPENPLANTER_SESSION_DIR"] ?? ".openplanter",
105
+ maxPersistedObservations: parseInt(process.env["OPENPLANTER_MAX_PERSISTED_OBS"] ?? "400", 10),
106
+ maxSolveSeconds: parseInt(process.env["OPENPLANTER_MAX_SOLVE_SECONDS"] ?? "0", 10),
107
+ recursive: _parseBool("OPENPLANTER_RECURSIVE", true),
108
+ minSubtaskDepth: parseInt(process.env["OPENPLANTER_MIN_SUBTASK_DEPTH"] ?? "0", 10),
109
+ acceptanceCriteria: _parseBool("OPENPLANTER_ACCEPTANCE_CRITERIA", true),
110
+ maxPlanChars: parseInt(process.env["OPENPLANTER_MAX_PLAN_CHARS"] ?? "40000", 10),
111
+ demo: _parseBool("OPENPLANTER_DEMO", false),
112
+ };
113
+ }
114
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,8EAA8E;AAC9E,0BAA0B;AAC1B,8EAA8E;AAE9E,MAAM,CAAC,MAAM,uBAAuB,GAA2B;IAC7D,MAAM,EAAE,SAAS;IACjB,SAAS,EAAE,iBAAiB;IAC5B,UAAU,EAAE,6BAA6B;IACzC,QAAQ,EAAE,gCAAgC;IAC1C,IAAI,EAAE,yBAAyB;CAChC,CAAC;AA6CF,8EAA8E;AAC9E,sCAAsC;AACtC,8EAA8E;AAE9E,SAAS,iBAAiB,CAAC,SAAiB;IAC1C,IAAI,EAAE,GAAG,SAAS,CAAC;IACnB,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC1B,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAClD,MAAM,EAAE,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAExC,MAAM,YAAY,GAChB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QAC7B,IAAI,CAAC;IAEP,MAAM,eAAe,GACnB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QAChC,IAAI,CAAC;IAEP,MAAM,gBAAgB,GACpB,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;QACjC,IAAI,CAAC;IAEP,MAAM,cAAc,GAClB,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;QAC/B,IAAI,CAAC;IAEP,MAAM,UAAU,GACd,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAC3B,IAAI,CAAC;IAEP,MAAM,SAAS,GACb,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QAC1B,IAAI,CAAC;IAEP,MAAM,YAAY,GAChB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;QAC7B,IAAI,CAAC;IAEP,MAAM,aAAa,GACjB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;QACnC,2BAA2B,CAAC;IAE9B,MAAM,UAAU,GAAG,CAAC,MAAc,EAAE,QAAiB,EAAW,EAAE;QAChE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC7D,IAAI,CAAC,GAAG;YAAE,OAAO,QAAQ,CAAC;QAC1B,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC5C,CAAC,CAAC;IAEF,OAAO;QACL,SAAS,EAAE,EAAE;QACb,QAAQ,EACN,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;YACpE,MAAM;QACR,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,iBAAiB;QAC5D,eAAe,EACb,CAAC,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,IAAI,MAAM,CAAC;aACpD,IAAI,EAAE;aACN,WAAW,EAAE,IAAI,IAAI;QAC1B,OAAO,EAAE,aAAa;QACtB,MAAM,EAAE,YAAY;QACpB,aAAa;QACb,gBAAgB,EACd,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC;YAC7C,8BAA8B;QAChC,iBAAiB,EACf,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC;YAC9C,8BAA8B;QAChC,eAAe,EACb,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC;YAC5C,4BAA4B;QAC9B,WAAW,EACT,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,IAAI,qBAAqB;QACnE,UAAU,EACR,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,IAAI,oBAAoB;QACjE,YAAY;QACZ,eAAe;QACf,gBAAgB;QAChB,cAAc;QACd,UAAU;QACV,SAAS;QACT,YAAY;QACZ,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC;QACnE,eAAe,EAAE,QAAQ,CACvB,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,KAAK,EAC7C,EAAE,CACH;QACD,mBAAmB,EAAE,QAAQ,CAC3B,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,IAAI,MAAM,EAClD,EAAE,CACH;QACD,iBAAiB,EAAE,QAAQ,CACzB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,IAAI,IAAI,EAC9C,EAAE,CACH;QACD,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,SAAS;QACpD,cAAc,EAAE,QAAQ,CACtB,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,IAAI,KAAK,EAC7C,EAAE,CACH;QACD,YAAY,EAAE,QAAQ,CACpB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,IAAI,OAAO,EACpD,EAAE,CACH;QACD,aAAa,EAAE,QAAQ,CACrB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,IAAI,KAAK,EACnD,EAAE,CACH;QACD,mBAAmB,EAAE,QAAQ,CAC3B,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,IAAI,OAAO,EACrD,EAAE,CACH;QACD,cAAc,EACZ,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,IAAI,cAAc;QAC1D,wBAAwB,EAAE,QAAQ,CAChC,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,IAAI,KAAK,EACrD,EAAE,CACH;QACD,eAAe,EAAE,QAAQ,CACvB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,IAAI,GAAG,EACnD,EAAE,CACH;QACD,SAAS,EAAE,UAAU,CAAC,uBAAuB,EAAE,IAAI,CAAC;QACpD,eAAe,EAAE,QAAQ,CACvB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,IAAI,GAAG,EACnD,EAAE,CACH;QACD,kBAAkB,EAAE,UAAU,CAAC,iCAAiC,EAAE,IAAI,CAAC;QACvE,YAAY,EAAE,QAAQ,CACpB,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,IAAI,OAAO,EACpD,EAAE,CACH;QACD,IAAI,EAAE,UAAU,CAAC,kBAAkB,EAAE,KAAK,CAAC;KAC5C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Credential management – migrated from agent/credentials.py.
3
+ *
4
+ * Provides CredentialBundle, CredentialStore, UserCredentialStore, and helper
5
+ * functions for discovering and prompting for API keys.
6
+ */
7
+ export declare class CredentialBundle {
8
+ openaiApiKey: string | null;
9
+ anthropicApiKey: string | null;
10
+ openrouterApiKey: string | null;
11
+ cerebrasApiKey: string | null;
12
+ grokApiKey: string | null;
13
+ exaApiKey: string | null;
14
+ voyageApiKey: string | null;
15
+ constructor(opts?: {
16
+ openaiApiKey?: string | null;
17
+ anthropicApiKey?: string | null;
18
+ openrouterApiKey?: string | null;
19
+ cerebrasApiKey?: string | null;
20
+ grokApiKey?: string | null;
21
+ exaApiKey?: string | null;
22
+ voyageApiKey?: string | null;
23
+ });
24
+ hasAny(): boolean;
25
+ mergeMissing(other: CredentialBundle): void;
26
+ toJson(): Record<string, string>;
27
+ static fromJson(payload: Record<string, string> | null): CredentialBundle;
28
+ }
29
+ export declare function parseEnvFile(filePath: string): CredentialBundle;
30
+ export declare function credentialsFromEnv(): CredentialBundle;
31
+ export declare function discoverEnvCandidates(workspace: string): string[];
32
+ export declare class CredentialStore {
33
+ workspace: string;
34
+ sessionRootDir: string;
35
+ credentialsPath: string;
36
+ constructor(workspace: string, sessionRootDir?: string);
37
+ load(): CredentialBundle;
38
+ save(creds: CredentialBundle): void;
39
+ }
40
+ export declare class UserCredentialStore {
41
+ credentialsPath: string;
42
+ constructor();
43
+ load(): CredentialBundle;
44
+ save(creds: CredentialBundle): void;
45
+ }
46
+ /**
47
+ * Prompt the user interactively for API keys.
48
+ *
49
+ * Returns ``[updatedCredentials, changed]``.
50
+ */
51
+ export declare function promptForCredentials(existing: CredentialBundle, force?: boolean): Promise<[CredentialBundle, boolean]>;
52
+ //# sourceMappingURL=credentials.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,qBAAa,gBAAgB;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;gBAEhB,IAAI,CAAC,EAAE;QACjB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAChC,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACjC,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC/B,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC1B,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B;IAUD,MAAM,IAAI,OAAO;IAYjB,YAAY,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;IAwB3C,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAahC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,gBAAgB;CAc1E;AAsBD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,CAgF/D;AAMD,wBAAgB,kBAAkB,IAAI,gBAAgB,CA8CrD;AAMD,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAyBjE;AAMD,qBAAa,eAAe;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;gBAEZ,SAAS,EAAE,MAAM,EAAE,cAAc,GAAE,MAAuB;IAYtE,IAAI,IAAI,gBAAgB;IAaxB,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;CAepC;AAQD,qBAAa,mBAAmB;IAC9B,eAAe,EAAE,MAAM,CAAC;;IAMxB,IAAI,IAAI,gBAAgB;IAaxB,IAAI,CAAC,KAAK,EAAE,gBAAgB,GAAG,IAAI;CAcpC;AAMD;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,gBAAgB,EAC1B,KAAK,GAAE,OAAe,GACrB,OAAO,CAAC,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAmEtC"}
@@ -0,0 +1,371 @@
1
+ /**
2
+ * Credential management – migrated from agent/credentials.py.
3
+ *
4
+ * Provides CredentialBundle, CredentialStore, UserCredentialStore, and helper
5
+ * functions for discovering and prompting for API keys.
6
+ */
7
+ import * as fs from "node:fs";
8
+ import * as path from "node:path";
9
+ import * as os from "node:os";
10
+ import * as readline from "node:readline";
11
+ // ---------------------------------------------------------------------------
12
+ // CredentialBundle
13
+ // ---------------------------------------------------------------------------
14
+ export class CredentialBundle {
15
+ openaiApiKey;
16
+ anthropicApiKey;
17
+ openrouterApiKey;
18
+ cerebrasApiKey;
19
+ grokApiKey;
20
+ exaApiKey;
21
+ voyageApiKey;
22
+ constructor(opts) {
23
+ this.openaiApiKey = opts?.openaiApiKey ?? null;
24
+ this.anthropicApiKey = opts?.anthropicApiKey ?? null;
25
+ this.openrouterApiKey = opts?.openrouterApiKey ?? null;
26
+ this.cerebrasApiKey = opts?.cerebrasApiKey ?? null;
27
+ this.grokApiKey = opts?.grokApiKey ?? null;
28
+ this.exaApiKey = opts?.exaApiKey ?? null;
29
+ this.voyageApiKey = opts?.voyageApiKey ?? null;
30
+ }
31
+ hasAny() {
32
+ return !!((this.openaiApiKey && this.openaiApiKey.trim()) ||
33
+ (this.anthropicApiKey && this.anthropicApiKey.trim()) ||
34
+ (this.openrouterApiKey && this.openrouterApiKey.trim()) ||
35
+ (this.cerebrasApiKey && this.cerebrasApiKey.trim()) ||
36
+ (this.grokApiKey && this.grokApiKey.trim()) ||
37
+ (this.exaApiKey && this.exaApiKey.trim()) ||
38
+ (this.voyageApiKey && this.voyageApiKey.trim()));
39
+ }
40
+ mergeMissing(other) {
41
+ if (!this.openaiApiKey && other.openaiApiKey) {
42
+ this.openaiApiKey = other.openaiApiKey;
43
+ }
44
+ if (!this.anthropicApiKey && other.anthropicApiKey) {
45
+ this.anthropicApiKey = other.anthropicApiKey;
46
+ }
47
+ if (!this.openrouterApiKey && other.openrouterApiKey) {
48
+ this.openrouterApiKey = other.openrouterApiKey;
49
+ }
50
+ if (!this.cerebrasApiKey && other.cerebrasApiKey) {
51
+ this.cerebrasApiKey = other.cerebrasApiKey;
52
+ }
53
+ if (!this.grokApiKey && other.grokApiKey) {
54
+ this.grokApiKey = other.grokApiKey;
55
+ }
56
+ if (!this.exaApiKey && other.exaApiKey) {
57
+ this.exaApiKey = other.exaApiKey;
58
+ }
59
+ if (!this.voyageApiKey && other.voyageApiKey) {
60
+ this.voyageApiKey = other.voyageApiKey;
61
+ }
62
+ }
63
+ toJson() {
64
+ const out = {};
65
+ if (this.openaiApiKey)
66
+ out["openai_api_key"] = this.openaiApiKey;
67
+ if (this.anthropicApiKey)
68
+ out["anthropic_api_key"] = this.anthropicApiKey;
69
+ if (this.openrouterApiKey)
70
+ out["openrouter_api_key"] = this.openrouterApiKey;
71
+ if (this.cerebrasApiKey)
72
+ out["cerebras_api_key"] = this.cerebrasApiKey;
73
+ if (this.grokApiKey)
74
+ out["grok_api_key"] = this.grokApiKey;
75
+ if (this.exaApiKey)
76
+ out["exa_api_key"] = this.exaApiKey;
77
+ if (this.voyageApiKey)
78
+ out["voyage_api_key"] = this.voyageApiKey;
79
+ return out;
80
+ }
81
+ static fromJson(payload) {
82
+ if (payload === null || typeof payload !== "object" || Array.isArray(payload)) {
83
+ return new CredentialBundle();
84
+ }
85
+ return new CredentialBundle({
86
+ openaiApiKey: (payload["openai_api_key"] ?? "").trim() || null,
87
+ anthropicApiKey: (payload["anthropic_api_key"] ?? "").trim() || null,
88
+ openrouterApiKey: (payload["openrouter_api_key"] ?? "").trim() || null,
89
+ cerebrasApiKey: (payload["cerebras_api_key"] ?? "").trim() || null,
90
+ grokApiKey: (payload["grok_api_key"] ?? "").trim() || null,
91
+ exaApiKey: (payload["exa_api_key"] ?? "").trim() || null,
92
+ voyageApiKey: (payload["voyage_api_key"] ?? "").trim() || null,
93
+ });
94
+ }
95
+ }
96
+ // ---------------------------------------------------------------------------
97
+ // Helpers
98
+ // ---------------------------------------------------------------------------
99
+ function _stripQuotes(value) {
100
+ const trimmed = value.trim();
101
+ if (trimmed.length >= 2 &&
102
+ trimmed[0] === trimmed[trimmed.length - 1] &&
103
+ (trimmed[0] === "'" || trimmed[0] === '"')) {
104
+ return trimmed.slice(1, -1);
105
+ }
106
+ return trimmed;
107
+ }
108
+ // ---------------------------------------------------------------------------
109
+ // parseEnvFile
110
+ // ---------------------------------------------------------------------------
111
+ export function parseEnvFile(filePath) {
112
+ if (!fs.existsSync(filePath)) {
113
+ return new CredentialBundle();
114
+ }
115
+ let stat;
116
+ try {
117
+ stat = fs.statSync(filePath);
118
+ }
119
+ catch {
120
+ return new CredentialBundle();
121
+ }
122
+ if (!stat.isFile()) {
123
+ return new CredentialBundle();
124
+ }
125
+ let text;
126
+ try {
127
+ text = fs.readFileSync(filePath, "utf-8");
128
+ }
129
+ catch {
130
+ return new CredentialBundle();
131
+ }
132
+ const env = {};
133
+ for (const raw of text.split("\n")) {
134
+ let line = raw.trim();
135
+ if (!line || line.startsWith("#"))
136
+ continue;
137
+ if (line.startsWith("export ")) {
138
+ line = line.slice("export ".length).trim();
139
+ }
140
+ if (!line.includes("="))
141
+ continue;
142
+ const eqIdx = line.indexOf("=");
143
+ const key = line.slice(0, eqIdx).trim();
144
+ const value = _stripQuotes(line.slice(eqIdx + 1).trim());
145
+ env[key] = value;
146
+ }
147
+ return new CredentialBundle({
148
+ openaiApiKey: (env["OPENAI_API_KEY"] ??
149
+ env["OPENPLANTER_OPENAI_API_KEY"] ??
150
+ "").trim() || null,
151
+ anthropicApiKey: (env["ANTHROPIC_API_KEY"] ??
152
+ env["OPENPLANTER_ANTHROPIC_API_KEY"] ??
153
+ "").trim() || null,
154
+ openrouterApiKey: (env["OPENROUTER_API_KEY"] ??
155
+ env["OPENPLANTER_OPENROUTER_API_KEY"] ??
156
+ "").trim() || null,
157
+ cerebrasApiKey: (env["CEREBRAS_API_KEY"] ??
158
+ env["OPENPLANTER_CEREBRAS_API_KEY"] ??
159
+ "").trim() || null,
160
+ grokApiKey: (env["XAI_API_KEY"] ??
161
+ env["GROK_API_KEY"] ??
162
+ env["OPENPLANTER_GROK_API_KEY"] ??
163
+ "").trim() || null,
164
+ exaApiKey: (env["EXA_API_KEY"] ??
165
+ env["OPENPLANTER_EXA_API_KEY"] ??
166
+ "").trim() || null,
167
+ voyageApiKey: (env["VOYAGE_API_KEY"] ??
168
+ env["OPENPLANTER_VOYAGE_API_KEY"] ??
169
+ "").trim() || null,
170
+ });
171
+ }
172
+ // ---------------------------------------------------------------------------
173
+ // credentialsFromEnv
174
+ // ---------------------------------------------------------------------------
175
+ export function credentialsFromEnv() {
176
+ return new CredentialBundle({
177
+ openaiApiKey: (process.env["OPENPLANTER_OPENAI_API_KEY"] ??
178
+ process.env["OPENAI_API_KEY"] ??
179
+ "").trim() || null,
180
+ anthropicApiKey: (process.env["OPENPLANTER_ANTHROPIC_API_KEY"] ??
181
+ process.env["ANTHROPIC_API_KEY"] ??
182
+ "").trim() || null,
183
+ openrouterApiKey: (process.env["OPENPLANTER_OPENROUTER_API_KEY"] ??
184
+ process.env["OPENROUTER_API_KEY"] ??
185
+ "").trim() || null,
186
+ cerebrasApiKey: (process.env["OPENPLANTER_CEREBRAS_API_KEY"] ??
187
+ process.env["CEREBRAS_API_KEY"] ??
188
+ "").trim() || null,
189
+ grokApiKey: (process.env["OPENPLANTER_GROK_API_KEY"] ??
190
+ process.env["XAI_API_KEY"] ??
191
+ process.env["GROK_API_KEY"] ??
192
+ "").trim() || null,
193
+ exaApiKey: (process.env["OPENPLANTER_EXA_API_KEY"] ??
194
+ process.env["EXA_API_KEY"] ??
195
+ "").trim() || null,
196
+ voyageApiKey: (process.env["OPENPLANTER_VOYAGE_API_KEY"] ??
197
+ process.env["VOYAGE_API_KEY"] ??
198
+ "").trim() || null,
199
+ });
200
+ }
201
+ // ---------------------------------------------------------------------------
202
+ // discoverEnvCandidates
203
+ // ---------------------------------------------------------------------------
204
+ export function discoverEnvCandidates(workspace) {
205
+ let ws = workspace;
206
+ if (ws.startsWith("~")) {
207
+ ws = path.join(os.homedir(), ws.slice(1));
208
+ }
209
+ ws = path.resolve(ws);
210
+ // Package root: directory containing the ``src`` directory (project root).
211
+ const pkgRoot = path.resolve(__dirname, "..");
212
+ const candidates = [
213
+ path.join(ws, ".env"),
214
+ path.join(pkgRoot, ".env"),
215
+ path.join(os.homedir(), ".env"),
216
+ ];
217
+ const seen = new Set();
218
+ const unique = [];
219
+ for (const candidate of candidates) {
220
+ const resolved = path.resolve(candidate);
221
+ if (seen.has(resolved))
222
+ continue;
223
+ seen.add(resolved);
224
+ unique.push(candidate);
225
+ }
226
+ return unique;
227
+ }
228
+ // ---------------------------------------------------------------------------
229
+ // CredentialStore
230
+ // ---------------------------------------------------------------------------
231
+ export class CredentialStore {
232
+ workspace;
233
+ sessionRootDir;
234
+ credentialsPath;
235
+ constructor(workspace, sessionRootDir = ".openplanter") {
236
+ let ws = workspace;
237
+ if (ws.startsWith("~")) {
238
+ ws = path.join(os.homedir(), ws.slice(1));
239
+ }
240
+ this.workspace = path.resolve(ws);
241
+ this.sessionRootDir = sessionRootDir;
242
+ const root = path.join(this.workspace, this.sessionRootDir);
243
+ this.credentialsPath = path.join(root, "credentials.json");
244
+ fs.mkdirSync(root, { recursive: true });
245
+ }
246
+ load() {
247
+ if (!fs.existsSync(this.credentialsPath)) {
248
+ return new CredentialBundle();
249
+ }
250
+ try {
251
+ const raw = fs.readFileSync(this.credentialsPath, "utf-8");
252
+ const payload = JSON.parse(raw);
253
+ return CredentialBundle.fromJson(payload);
254
+ }
255
+ catch {
256
+ return new CredentialBundle();
257
+ }
258
+ }
259
+ save(creds) {
260
+ const payload = creds.toJson();
261
+ const dir = path.dirname(this.credentialsPath);
262
+ fs.mkdirSync(dir, { recursive: true });
263
+ fs.writeFileSync(this.credentialsPath, JSON.stringify(payload, null, 2), "utf-8");
264
+ try {
265
+ fs.chmodSync(this.credentialsPath, 0o600);
266
+ }
267
+ catch {
268
+ // Ignore permission errors (e.g. on Windows)
269
+ }
270
+ }
271
+ }
272
+ // ---------------------------------------------------------------------------
273
+ // UserCredentialStore
274
+ // ---------------------------------------------------------------------------
275
+ const _USER_CONFIG_DIR = path.join(os.homedir(), ".openplanter");
276
+ export class UserCredentialStore {
277
+ credentialsPath;
278
+ constructor() {
279
+ this.credentialsPath = path.join(_USER_CONFIG_DIR, "credentials.json");
280
+ }
281
+ load() {
282
+ if (!fs.existsSync(this.credentialsPath)) {
283
+ return new CredentialBundle();
284
+ }
285
+ try {
286
+ const raw = fs.readFileSync(this.credentialsPath, "utf-8");
287
+ const payload = JSON.parse(raw);
288
+ return CredentialBundle.fromJson(payload);
289
+ }
290
+ catch {
291
+ return new CredentialBundle();
292
+ }
293
+ }
294
+ save(creds) {
295
+ const payload = creds.toJson();
296
+ fs.mkdirSync(path.dirname(this.credentialsPath), { recursive: true });
297
+ fs.writeFileSync(this.credentialsPath, JSON.stringify(payload, null, 2), "utf-8");
298
+ try {
299
+ fs.chmodSync(this.credentialsPath, 0o600);
300
+ }
301
+ catch {
302
+ // Ignore permission errors
303
+ }
304
+ }
305
+ }
306
+ // ---------------------------------------------------------------------------
307
+ // promptForCredentials
308
+ // ---------------------------------------------------------------------------
309
+ /**
310
+ * Prompt the user interactively for API keys.
311
+ *
312
+ * Returns ``[updatedCredentials, changed]``.
313
+ */
314
+ export async function promptForCredentials(existing, force = false) {
315
+ const current = new CredentialBundle({
316
+ openaiApiKey: existing.openaiApiKey,
317
+ anthropicApiKey: existing.anthropicApiKey,
318
+ openrouterApiKey: existing.openrouterApiKey,
319
+ cerebrasApiKey: existing.cerebrasApiKey,
320
+ grokApiKey: existing.grokApiKey,
321
+ exaApiKey: existing.exaApiKey,
322
+ voyageApiKey: existing.voyageApiKey,
323
+ });
324
+ const shouldPrompt = force || !current.hasAny();
325
+ if (!shouldPrompt)
326
+ return [current, false];
327
+ if (!process.stdin.isTTY)
328
+ return [current, false];
329
+ if (force) {
330
+ console.log("Key configuration mode: press Enter to keep existing values.");
331
+ }
332
+ else {
333
+ console.log("No API keys configured. Enter keys to enable providers (leave blank to skip).");
334
+ }
335
+ let changed = false;
336
+ const rl = readline.createInterface({
337
+ input: process.stdin,
338
+ output: process.stdout,
339
+ });
340
+ const _ask = (label, existingValue) => {
341
+ return new Promise((resolve) => {
342
+ const prompt = force && existingValue
343
+ ? `${label} API key [press Enter to keep existing]: `
344
+ : `${label} API key: `;
345
+ rl.question(prompt, (answer) => {
346
+ const value = answer.trim();
347
+ if (!value) {
348
+ resolve(existingValue);
349
+ return;
350
+ }
351
+ if (value !== (existingValue ?? "")) {
352
+ changed = true;
353
+ }
354
+ resolve(value);
355
+ });
356
+ });
357
+ };
358
+ current.openaiApiKey = await _ask("OpenAI", current.openaiApiKey);
359
+ current.anthropicApiKey = await _ask("Anthropic", current.anthropicApiKey);
360
+ current.openrouterApiKey = await _ask("OpenRouter", current.openrouterApiKey);
361
+ current.cerebrasApiKey = await _ask("Cerebras", current.cerebrasApiKey);
362
+ current.grokApiKey = await _ask("Grok (xAI)", current.grokApiKey);
363
+ current.exaApiKey = await _ask("Exa", current.exaApiKey);
364
+ current.voyageApiKey = await _ask("Voyage", current.voyageApiKey);
365
+ rl.close();
366
+ if (!force && current.hasAny() && !existing.hasAny()) {
367
+ changed = true;
368
+ }
369
+ return [current, changed];
370
+ }
371
+ //# sourceMappingURL=credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credentials.js","sourceRoot":"","sources":["../src/credentials.ts"],"names":[],"mappings":"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"}
package/dist/demo.d.ts ADDED
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Demo mode: censor workspace path segments in TUI output.
3
+ *
4
+ * Migrated from agent/demo.py.
5
+ *
6
+ * Censoring is UI-only – the agent's internal state is unaffected.
7
+ * Block characters (U+2588) replace sensitive text at the same length
8
+ * so style spans are preserved.
9
+ *
10
+ * Entity-name censoring is handled by a prompt instruction (see
11
+ * prompts.ts) rather than regex post-processing.
12
+ */
13
+ export declare const _GENERIC_PATH_PARTS: ReadonlySet<string>;
14
+ export declare class DemoCensor {
15
+ /**
16
+ * Builds replacement tables from a workspace path and censors text.
17
+ */
18
+ private _replacements;
19
+ constructor(workspace: string);
20
+ private _buildPathReplacements;
21
+ /**
22
+ * Apply workspace-path segment replacements.
23
+ */
24
+ censorText(text: string): string;
25
+ }
26
+ //# sourceMappingURL=demo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo.d.ts","sourceRoot":"","sources":["../src/demo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAuBlD,CAAC;AAMH,qBAAa,UAAU;IACrB;;OAEG;IAEH,OAAO,CAAC,aAAa,CAA0B;gBAEnC,SAAS,EAAE,MAAM;IAO7B,OAAO,CAAC,sBAAsB;IAuB9B;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAejC"}