openplanter 0.2.3 → 0.2.5
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 +290 -50
- package/dist/investigation-tools/asx-calendar-fetcher.d.ts +3 -16
- package/dist/investigation-tools/asx-calendar-fetcher.d.ts.map +1 -1
- package/dist/investigation-tools/asx-calendar-fetcher.js +121 -129
- package/dist/investigation-tools/asx-calendar-fetcher.js.map +1 -1
- package/dist/investigation-tools/bulk-asx-announcements.d.ts +2 -26
- package/dist/investigation-tools/bulk-asx-announcements.d.ts.map +1 -1
- package/dist/investigation-tools/bulk-asx-announcements.js +48 -95
- package/dist/investigation-tools/bulk-asx-announcements.js.map +1 -1
- package/dist/investigation-tools/price-fetcher.d.ts +1 -27
- package/dist/investigation-tools/price-fetcher.d.ts.map +1 -1
- package/dist/investigation-tools/price-fetcher.js +39 -76
- package/dist/investigation-tools/price-fetcher.js.map +1 -1
- package/dist/investigation-tools/shared.d.ts +2 -1
- package/dist/investigation-tools/shared.d.ts.map +1 -1
- package/dist/investigation-tools/shared.js +5 -1
- package/dist/investigation-tools/shared.js.map +1 -1
- package/dist/investigation-tools/volume-scanner.d.ts +0 -31
- package/dist/investigation-tools/volume-scanner.d.ts.map +1 -1
- package/dist/investigation-tools/volume-scanner.js +24 -86
- package/dist/investigation-tools/volume-scanner.js.map +1 -1
- package/package.json +3 -2
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# OpenPlanter
|
|
2
2
|
|
|
3
|
-
A recursive-language-model investigation agent with CLI,
|
|
3
|
+
A recursive-language-model investigation agent with a rich CLI/TUI, 86 built-in tools spanning financial forensics, blockchain analysis, prediction markets, regulatory filings, and social intelligence. Designed to be imported as a module into Node.js/TypeScript projects or used standalone via the CLI.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
@@ -30,7 +30,7 @@ npx openplanter-agent --task "Analyse recent director trades for BHP" --workspac
|
|
|
30
30
|
```typescript
|
|
31
31
|
import { buildEngine, agentConfigFromEnv } from "openplanter";
|
|
32
32
|
|
|
33
|
-
const config = agentConfigFromEnv();
|
|
33
|
+
const config = agentConfigFromEnv("./workspace");
|
|
34
34
|
const engine = await buildEngine(config);
|
|
35
35
|
```
|
|
36
36
|
|
|
@@ -62,13 +62,35 @@ import {
|
|
|
62
62
|
bulkAsxAnnouncements,
|
|
63
63
|
hotcopperScraper,
|
|
64
64
|
multiForumScraper,
|
|
65
|
+
polymarketMarkets,
|
|
66
|
+
predictionMarkets,
|
|
67
|
+
duneAnalytics,
|
|
68
|
+
blockchainScanner,
|
|
69
|
+
dexscreenerPairs,
|
|
70
|
+
walletClusterer,
|
|
71
|
+
secTools,
|
|
72
|
+
politicalFinance,
|
|
73
|
+
globalRegistries,
|
|
74
|
+
governmentRecords,
|
|
75
|
+
socialIntelligence,
|
|
76
|
+
advancedAnalytics,
|
|
77
|
+
documentProcessing,
|
|
78
|
+
investigationAutomation,
|
|
79
|
+
monitoringTools,
|
|
80
|
+
cryptoEcosystem,
|
|
65
81
|
} from "openplanter/investigation-tools";
|
|
66
82
|
|
|
67
83
|
// Fetch price data from Yahoo Finance
|
|
68
84
|
const ohlcv = await priceFetcher.fetchOhlcv(["BHP", "RIO"], "3mo", "1d");
|
|
69
85
|
|
|
70
86
|
// Scan for volume/price anomalies
|
|
71
|
-
const anomalies = await volumeScanner.scanTickers(["BHP"],
|
|
87
|
+
const anomalies = await volumeScanner.scanTickers(["BHP"], 60);
|
|
88
|
+
|
|
89
|
+
// Fetch all ASX tickers and their 4C calendar data
|
|
90
|
+
const calendar = await asxCalendarFetcher.fetchCalendar({ tickers: "all", period: "next_90d" });
|
|
91
|
+
|
|
92
|
+
// Fetch calendar for specific tickers
|
|
93
|
+
const bhpCalendar = await asxCalendarFetcher.fetchCalendar({ tickers: "BHP,RIO,WES", period: "Q1_2026" });
|
|
72
94
|
|
|
73
95
|
// Resolve entities across datasets
|
|
74
96
|
const resolved = entityResolver.modeResolve(entities, 80);
|
|
@@ -89,6 +111,7 @@ Or import individual tools directly:
|
|
|
89
111
|
```typescript
|
|
90
112
|
import { fetchOhlcv, computeMetrics } from "openplanter/investigation-tools/price-fetcher";
|
|
91
113
|
import { scrapeHotcopper } from "openplanter/investigation-tools/hotcopper-scraper";
|
|
114
|
+
import { fetchAllAsxTickers, fetchCalendar } from "openplanter/investigation-tools/asx-calendar-fetcher";
|
|
92
115
|
```
|
|
93
116
|
|
|
94
117
|
## Supported Providers
|
|
@@ -99,14 +122,17 @@ import { scrapeHotcopper } from "openplanter/investigation-tools/hotcopper-scrap
|
|
|
99
122
|
| Anthropic | `claude-opus-4-6` | `ANTHROPIC_API_KEY` |
|
|
100
123
|
| OpenRouter | `anthropic/claude-sonnet-4-5` | `OPENROUTER_API_KEY` |
|
|
101
124
|
| Cerebras | `qwen-3-235b-a22b-instruct-2507` | `CEREBRAS_API_KEY` |
|
|
125
|
+
| Grok (xAI) | `grok-4-1-fast-reasoning` | `XAI_API_KEY` / `GROK_API_KEY` |
|
|
102
126
|
|
|
103
127
|
Additional service keys: `EXA_API_KEY` (web search), `VOYAGE_API_KEY` (embeddings).
|
|
104
128
|
|
|
105
|
-
All keys can also be set with an `OPENPLANTER_` prefix, via `.env` files, or via CLI flags.
|
|
129
|
+
All keys can also be set with an `OPENPLANTER_` prefix (e.g. `OPENPLANTER_OPENAI_API_KEY`), via `.env` files, or via CLI flags.
|
|
106
130
|
|
|
107
131
|
## Agent Tools
|
|
108
132
|
|
|
109
|
-
The agent has access to
|
|
133
|
+
The agent has access to 86 tools organized into core workspace operations and domain-specific investigation modules.
|
|
134
|
+
|
|
135
|
+
### Core Tools (19)
|
|
110
136
|
|
|
111
137
|
- **Workspace** -- `list_files`, `search_files`, `repo_map`, `read_file`, `write_file`, `edit_file`, `hashline_edit`, `apply_patch`
|
|
112
138
|
- **Shell** -- `run_shell`, `run_shell_bg`, `check_shell_bg`, `kill_shell_bg`
|
|
@@ -115,6 +141,138 @@ The agent has access to 19 tools organized around its investigation workflow:
|
|
|
115
141
|
|
|
116
142
|
In recursive mode (the default), the agent spawns sub-agents via `subtask` and `execute`.
|
|
117
143
|
|
|
144
|
+
### Australian Market Tools (13)
|
|
145
|
+
|
|
146
|
+
| Tool | Description |
|
|
147
|
+
|------|-------------|
|
|
148
|
+
| `aph_holdings` | Scrape APH politician holdings disclosures |
|
|
149
|
+
| `asx_parser` | Parse ASX announcements (Appendix 3Y, 4C, trading halts) |
|
|
150
|
+
| `asx_calendar_fetcher` | Fetch ASX Appendix 4C quarterly reporting calendar (supports `all` tickers via ASX company directory) |
|
|
151
|
+
| `bulk_asx_announcements` | Bulk-fetch ASX announcements (3Y, 4C, 3B) for multiple tickers |
|
|
152
|
+
| `asic_officer_lookup` | Query ASIC/ABR for company officers and directors by ABN or ticker |
|
|
153
|
+
| `entity_resolver` | Fuzzy entity matching and resolution across Australian datasets |
|
|
154
|
+
| `hotcopper_scraper` | Scrape HotCopper stock forum for ticker sentiment and rumors |
|
|
155
|
+
| `multi_forum_scraper` | Aggregate sentiment from HotCopper and other forums |
|
|
156
|
+
| `insider_graph` | Build and analyse entity-event relationship graphs |
|
|
157
|
+
| `insider_suspicion_scorer` | Composite insider-trading suspicion scoring |
|
|
158
|
+
| `price_fetcher` | Yahoo Finance OHLCV data and technical metrics |
|
|
159
|
+
| `timeline_linker` | Correlate trades with announcements on a timeline |
|
|
160
|
+
| `volume_scanner` | Detect unusual volume and price anomalies |
|
|
161
|
+
|
|
162
|
+
### Prediction Markets (9)
|
|
163
|
+
|
|
164
|
+
| Tool | Description |
|
|
165
|
+
|------|-------------|
|
|
166
|
+
| `polymarket_markets_fetcher` | Fetch active Polymarket markets |
|
|
167
|
+
| `polymarket_leaderboard` | Polymarket leaderboard data |
|
|
168
|
+
| `polymarket_whales` | Track Polymarket whale positions |
|
|
169
|
+
| `polymarket_trades_history` | Historical Polymarket trade data |
|
|
170
|
+
| `polymarket_resolutions` | Polymarket market resolutions |
|
|
171
|
+
| `polymarket_anomaly_scanner` | Detect anomalies in Polymarket activity |
|
|
172
|
+
| `kalshi_markets` | Kalshi prediction market data |
|
|
173
|
+
| `predictit_markets` | PredictIt market data |
|
|
174
|
+
| `manifold_markets` | Manifold Markets data |
|
|
175
|
+
|
|
176
|
+
### Blockchain & Crypto (8)
|
|
177
|
+
|
|
178
|
+
| Tool | Description |
|
|
179
|
+
|------|-------------|
|
|
180
|
+
| `dune_query_executor` | Execute Dune Analytics queries |
|
|
181
|
+
| `dune_polymarket` | Dune queries for Polymarket on-chain data |
|
|
182
|
+
| `dune_tx_timings` | Analyse transaction timing patterns |
|
|
183
|
+
| `polygonscan_wallet` | Polygon wallet transaction data |
|
|
184
|
+
| `etherscan_wallet` | Ethereum wallet transaction data |
|
|
185
|
+
| `blockchain_tx_tracer` | Trace blockchain transaction flows |
|
|
186
|
+
| `dexscreener_pairs` | DEXScreener token pair data |
|
|
187
|
+
| `wallet_clusterer` | Cluster related wallet addresses |
|
|
188
|
+
|
|
189
|
+
### SEC & US Regulatory (3)
|
|
190
|
+
|
|
191
|
+
| Tool | Description |
|
|
192
|
+
|------|-------------|
|
|
193
|
+
| `sec_form4_parser` | Parse SEC Form 4 insider trading filings |
|
|
194
|
+
| `sec_edgar_filer` | Search SEC EDGAR filer database |
|
|
195
|
+
| `sec_whistleblower_awards` | SEC whistleblower award data |
|
|
196
|
+
|
|
197
|
+
### Political Finance (4)
|
|
198
|
+
|
|
199
|
+
| Tool | Description |
|
|
200
|
+
|------|-------------|
|
|
201
|
+
| `fec_contributions` | FEC campaign contribution records |
|
|
202
|
+
| `opensecrets_lobbying` | OpenSecrets lobbying disclosure data |
|
|
203
|
+
| `congress_disclosures` | Congressional financial disclosures |
|
|
204
|
+
| `political_donation_tracker` | Cross-border political donation tracking |
|
|
205
|
+
|
|
206
|
+
### Global Registries (3)
|
|
207
|
+
|
|
208
|
+
| Tool | Description |
|
|
209
|
+
|------|-------------|
|
|
210
|
+
| `opencorporates_lookup` | OpenCorporates company registry search |
|
|
211
|
+
| `ofac_sanctions_checker` | OFAC sanctions list screening |
|
|
212
|
+
| `beneficial_ownership_tracer` | Trace beneficial ownership chains |
|
|
213
|
+
|
|
214
|
+
### Government Records (3)
|
|
215
|
+
|
|
216
|
+
| Tool | Description |
|
|
217
|
+
|------|-------------|
|
|
218
|
+
| `us_court_docket` | US court docket and case search |
|
|
219
|
+
| `federal_contracts` | Federal contract award records |
|
|
220
|
+
| `foia_request_builder` | Generate FOIA request templates |
|
|
221
|
+
|
|
222
|
+
### Social Intelligence (6)
|
|
223
|
+
|
|
224
|
+
| Tool | Description |
|
|
225
|
+
|------|-------------|
|
|
226
|
+
| `twitter_market_mentions` | Track market-related Twitter/X mentions |
|
|
227
|
+
| `reddit_wsb_scanner` | Scan Reddit WallStreetBets and related subs |
|
|
228
|
+
| `discord_channel_scraper` | Scrape Discord channel messages |
|
|
229
|
+
| `telegram_channel_monitor` | Monitor Telegram channels |
|
|
230
|
+
| `news_sentiment_fetcher` | Fetch and score news article sentiment |
|
|
231
|
+
| `substack_scraper` | Scrape Substack newsletter content |
|
|
232
|
+
|
|
233
|
+
### Advanced Analytics (4)
|
|
234
|
+
|
|
235
|
+
| Tool | Description |
|
|
236
|
+
|------|-------------|
|
|
237
|
+
| `anomaly_detector_ts` | Time-series anomaly detection |
|
|
238
|
+
| `timeline_correlator` | Cross-dataset timeline correlation |
|
|
239
|
+
| `network_centrality_analyzer` | Graph centrality and influence analysis |
|
|
240
|
+
| `prediction_market_arbitrage` | Detect prediction market arbitrage opportunities |
|
|
241
|
+
|
|
242
|
+
### Document Processing (3)
|
|
243
|
+
|
|
244
|
+
| Tool | Description |
|
|
245
|
+
|------|-------------|
|
|
246
|
+
| `pdf_filings_extractor` | Extract structured data from PDF filings |
|
|
247
|
+
| `document_similarity_scorer` | Score document similarity |
|
|
248
|
+
| `sentiment_analyzer` | General-purpose text sentiment analysis |
|
|
249
|
+
|
|
250
|
+
### Investigation Automation (5)
|
|
251
|
+
|
|
252
|
+
| Tool | Description |
|
|
253
|
+
|------|-------------|
|
|
254
|
+
| `cross_reference_engine` | Cross-reference entities across multiple data sources |
|
|
255
|
+
| `insider_network_expander` | Expand insider networks via graph traversal |
|
|
256
|
+
| `compliance_risk_report` | Generate compliance risk assessment reports |
|
|
257
|
+
| `global_entity_resolver` | Resolve entities across international registries |
|
|
258
|
+
| `jurisdiction_risk_scorer` | Score jurisdictional risk for entities |
|
|
259
|
+
|
|
260
|
+
### Monitoring (4)
|
|
261
|
+
|
|
262
|
+
| Tool | Description |
|
|
263
|
+
|------|-------------|
|
|
264
|
+
| `whale_alert_monitor` | Monitor large crypto/market transactions |
|
|
265
|
+
| `dark_pool_activity` | Track dark pool trading activity |
|
|
266
|
+
| `corporate_filings_monitor` | Monitor new corporate filings |
|
|
267
|
+
| `real_estate_records` | Property ownership record search |
|
|
268
|
+
|
|
269
|
+
### Crypto Ecosystem (2)
|
|
270
|
+
|
|
271
|
+
| Tool | Description |
|
|
272
|
+
|------|-------------|
|
|
273
|
+
| `gitcoin_grants_parser` | Parse Gitcoin grant data |
|
|
274
|
+
| `evidence_graph_builder` | Build evidence graphs from investigation data |
|
|
275
|
+
|
|
118
276
|
## CLI Reference
|
|
119
277
|
|
|
120
278
|
```
|
|
@@ -123,76 +281,158 @@ openplanter-agent [options]
|
|
|
123
281
|
|
|
124
282
|
| Flag | Description |
|
|
125
283
|
|------|-------------|
|
|
126
|
-
| `--workspace
|
|
127
|
-
| `--
|
|
128
|
-
| `--model
|
|
129
|
-
| `--
|
|
284
|
+
| `--workspace <dir>` | Workspace root directory (default: `.`) |
|
|
285
|
+
| `--model <name>` | Model name override |
|
|
286
|
+
| `--default-model <name>` | Persist workspace default model |
|
|
287
|
+
| `--default-model-openai <name>` | Persist default model for OpenAI provider |
|
|
288
|
+
| `--default-model-anthropic <name>` | Persist default model for Anthropic provider |
|
|
289
|
+
| `--default-model-openrouter <name>` | Persist default model for OpenRouter provider |
|
|
290
|
+
| `--default-model-cerebras <name>` | Persist default model for Cerebras provider |
|
|
291
|
+
| `--default-model-grok <name>` | Persist default model for Grok (xAI) provider |
|
|
292
|
+
| `--base-url <url>` | Provider base URL override |
|
|
293
|
+
| `--api-key <key>` | Legacy API key alias (maps to OpenAI) |
|
|
294
|
+
| `--openai-api-key <key>` | OpenAI API key override |
|
|
295
|
+
| `--anthropic-api-key <key>` | Anthropic API key override |
|
|
296
|
+
| `--openrouter-api-key <key>` | OpenRouter API key override |
|
|
297
|
+
| `--cerebras-api-key <key>` | Cerebras API key override |
|
|
298
|
+
| `--grok-api-key <key>` | Grok (xAI) API key override |
|
|
299
|
+
| `--exa-api-key <key>` | Exa API key override |
|
|
300
|
+
| `--voyage-api-key <key>` | Voyage API key override |
|
|
301
|
+
| `--configure-keys` | Interactive key configuration |
|
|
302
|
+
| `--task <objective>` | Run a single task and exit (headless) |
|
|
130
303
|
| `--recursive` | Enable recursive sub-agent delegation |
|
|
131
|
-
| `--max-depth
|
|
132
|
-
| `--max-steps
|
|
304
|
+
| `--max-depth <n>` | Maximum recursion depth (default: 4) |
|
|
305
|
+
| `--max-steps <n>` | Maximum steps per recursive call (default: 100) |
|
|
306
|
+
| `--timeout <n>` | Shell command timeout in seconds (default: 45) |
|
|
307
|
+
| `--headless` | Disable interactive UI/prompts (for CI) |
|
|
133
308
|
| `--no-tui` | Plain REPL (no colors or spinner) |
|
|
134
|
-
| `--
|
|
135
|
-
| `--resume` | Resume
|
|
136
|
-
| `--
|
|
137
|
-
| `--list-models` | Fetch available models |
|
|
138
|
-
| `--
|
|
309
|
+
| `--session-id <id>` | Session id to use |
|
|
310
|
+
| `--resume` | Resume an existing session |
|
|
311
|
+
| `--list-sessions` | List known sessions and exit |
|
|
312
|
+
| `--list-models` | Fetch and list available provider models |
|
|
313
|
+
| `--acceptance-criteria` | Enable acceptance criteria judging |
|
|
314
|
+
| `--demo` | Censor entity names in output |
|
|
315
|
+
| `--show-settings` | Show persistent workspace defaults and exit |
|
|
139
316
|
|
|
140
317
|
## TUI Commands
|
|
141
318
|
|
|
142
319
|
| Command | Action |
|
|
143
320
|
|---------|--------|
|
|
144
|
-
| `/model
|
|
145
|
-
| `/
|
|
146
|
-
| `/
|
|
321
|
+
| `/model` | Show current model, provider, and aliases |
|
|
322
|
+
| `/model <name>` | Switch model (e.g. `/model opus`, `/model gpt5`) |
|
|
323
|
+
| `/model <name> --save` | Switch model and persist as workspace default |
|
|
324
|
+
| `/model list [all]` | List available models |
|
|
325
|
+
| `/reasoning [low\|medium\|high\|off]` | Show or change reasoning effort |
|
|
326
|
+
| `/status` | Show session status, provider, and token usage |
|
|
147
327
|
| `/clear` | Clear the screen |
|
|
148
|
-
| `/quit` | Exit |
|
|
328
|
+
| `/quit` or `/exit` | Exit |
|
|
329
|
+
| `/help` | Show command help |
|
|
330
|
+
|
|
331
|
+
### Model Aliases
|
|
332
|
+
|
|
333
|
+
| Alias | Model |
|
|
334
|
+
|-------|-------|
|
|
335
|
+
| `opus` / `opus4.6` | `claude-opus-4-6` |
|
|
336
|
+
| `sonnet` / `sonnet4.5` | `claude-sonnet-4-5-20250929` |
|
|
337
|
+
| `haiku` / `haiku4.5` | `claude-haiku-4-5-20251001` |
|
|
338
|
+
| `gpt5` / `gpt5.2` | `gpt-5.2` |
|
|
339
|
+
| `gpt4` / `gpt4.1` | `gpt-4.1` |
|
|
340
|
+
| `gpt4o` | `gpt-4o` |
|
|
341
|
+
| `o4` / `o4-mini` | `o4-mini` |
|
|
342
|
+
| `o3` / `o3-mini` | `o3-mini` |
|
|
343
|
+
| `cerebras` / `qwen235b` | `qwen-3-235b-a22b-instruct-2507` |
|
|
344
|
+
| `oss120b` | `gpt-oss-120b` |
|
|
345
|
+
| `grok` / `grok41fast` | `grok-4-1-fast-reasoning` |
|
|
346
|
+
| `grok3mini` | `grok-3-mini` |
|
|
347
|
+
| `grok4` | `grok-4-0709` |
|
|
348
|
+
| `grok4fast` | `grok-4-fast-reasoning` |
|
|
149
349
|
|
|
150
350
|
## Configuration
|
|
151
351
|
|
|
152
352
|
Keys are resolved in priority order:
|
|
153
353
|
|
|
154
|
-
1. CLI flags
|
|
354
|
+
1. CLI flags (`--openai-api-key`, `--anthropic-api-key`, etc.)
|
|
155
355
|
2. Environment variables (`OPENAI_API_KEY` or `OPENPLANTER_OPENAI_API_KEY`)
|
|
156
356
|
3. `.env` file in the workspace
|
|
157
357
|
4. Workspace credential store (`.openplanter/credentials.json`)
|
|
158
358
|
5. User credential store (`~/.openplanter/credentials.json`)
|
|
159
359
|
|
|
360
|
+
### Environment Variables
|
|
361
|
+
|
|
362
|
+
All engine parameters can be configured via environment variables with the `OPENPLANTER_` prefix:
|
|
363
|
+
|
|
364
|
+
| Variable | Default | Description |
|
|
365
|
+
|----------|---------|-------------|
|
|
366
|
+
| `OPENPLANTER_PROVIDER` | `auto` | Provider selection |
|
|
367
|
+
| `OPENPLANTER_MODEL` | `claude-opus-4-6` | Model name |
|
|
368
|
+
| `OPENPLANTER_REASONING_EFFORT` | `high` | Reasoning effort level |
|
|
369
|
+
| `OPENPLANTER_MAX_DEPTH` | `4` | Maximum recursion depth |
|
|
370
|
+
| `OPENPLANTER_MAX_STEPS` | `100` | Maximum steps per call |
|
|
371
|
+
| `OPENPLANTER_CMD_TIMEOUT` | `45` | Shell command timeout (seconds) |
|
|
372
|
+
| `OPENPLANTER_RECURSIVE` | `true` | Enable recursive mode |
|
|
373
|
+
| `OPENPLANTER_DEMO` | `false` | Censor entity names |
|
|
374
|
+
| `OPENPLANTER_MAX_OBS_CHARS` | `6000` | Max observation characters |
|
|
375
|
+
| `OPENPLANTER_MAX_FILES` | `400` | Max files listed |
|
|
376
|
+
| `OPENPLANTER_MAX_FILE_CHARS` | `20000` | Max file read characters |
|
|
377
|
+
| `OPENPLANTER_MAX_SEARCH_HITS` | `200` | Max search result hits |
|
|
378
|
+
| `OPENPLANTER_MAX_SHELL_CHARS` | `16000` | Max shell output characters |
|
|
379
|
+
| `OPENPLANTER_SESSION_DIR` | `.openplanter` | Session root directory |
|
|
380
|
+
| `OPENPLANTER_SHELL` | `/bin/sh` | Shell for command execution |
|
|
381
|
+
|
|
160
382
|
## Project Structure
|
|
161
383
|
|
|
162
384
|
```
|
|
163
385
|
src/
|
|
164
|
-
index.ts
|
|
165
|
-
cli.ts
|
|
166
|
-
engine.ts
|
|
167
|
-
runtime.ts
|
|
168
|
-
model.ts
|
|
169
|
-
builder.ts
|
|
170
|
-
tools.ts
|
|
171
|
-
tool-defs.ts
|
|
172
|
-
prompts.ts
|
|
173
|
-
config.ts
|
|
174
|
-
credentials.ts
|
|
175
|
-
tui.ts
|
|
176
|
-
demo.ts
|
|
177
|
-
patching.ts
|
|
178
|
-
settings.ts
|
|
179
|
-
replay-log.ts
|
|
386
|
+
index.ts Library entry point
|
|
387
|
+
cli.ts CLI entry point and REPL
|
|
388
|
+
engine.ts Recursive language model engine
|
|
389
|
+
runtime.ts Session persistence and lifecycle
|
|
390
|
+
model.ts Provider-agnostic LLM abstraction
|
|
391
|
+
builder.ts Engine/model factory
|
|
392
|
+
tools.ts Workspace tool implementations
|
|
393
|
+
tool-defs.ts Tool JSON schemas (86 tools)
|
|
394
|
+
prompts.ts System prompt construction
|
|
395
|
+
config.ts Configuration and provider defaults
|
|
396
|
+
credentials.ts Credential management and discovery
|
|
397
|
+
tui.ts Rich terminal UI with slash commands
|
|
398
|
+
demo.ts Demo mode (output censoring)
|
|
399
|
+
patching.ts File patching utilities
|
|
400
|
+
settings.ts Persistent workspace settings
|
|
401
|
+
replay-log.ts Replay logging
|
|
180
402
|
investigation-tools/
|
|
181
|
-
index.ts
|
|
182
|
-
shared.ts
|
|
183
|
-
|
|
403
|
+
index.ts Barrel export for all investigation modules
|
|
404
|
+
shared.ts HTTP helpers, date parsing, sentiment, normalization
|
|
405
|
+
shared-crypto.ts Shared crypto/blockchain utilities
|
|
406
|
+
tool-registry.ts Investigation tool dispatch registry
|
|
407
|
+
aph-holdings.ts APH politician holdings scraper
|
|
184
408
|
asic-officer-lookup.ts ASIC officer/director lookup
|
|
185
|
-
asx-calendar-fetcher.ts ASX 4C calendar
|
|
186
|
-
asx-parser.ts
|
|
409
|
+
asx-calendar-fetcher.ts ASX 4C calendar (supports all ~2,000 ASX tickers)
|
|
410
|
+
asx-parser.ts ASX announcement parser (3Y, 4C, halts)
|
|
187
411
|
bulk-asx-announcements.ts Bulk ASX announcement fetcher
|
|
188
|
-
entity-resolver.ts
|
|
189
|
-
hotcopper-scraper.ts
|
|
190
|
-
insider-graph.ts
|
|
412
|
+
entity-resolver.ts Fuzzy entity matching and resolution
|
|
413
|
+
hotcopper-scraper.ts HotCopper forum scraper
|
|
414
|
+
insider-graph.ts Entity-event graph analysis
|
|
191
415
|
insider-suspicion-scorer.ts Composite suspicion scorer
|
|
192
|
-
multi-forum-scraper.ts
|
|
193
|
-
price-fetcher.ts
|
|
194
|
-
timeline-linker.ts
|
|
195
|
-
volume-scanner.ts
|
|
416
|
+
multi-forum-scraper.ts Multi-forum sentiment aggregator
|
|
417
|
+
price-fetcher.ts Yahoo Finance OHLCV data and metrics
|
|
418
|
+
timeline-linker.ts Trade-announcement timeline correlation
|
|
419
|
+
volume-scanner.ts Volume/price anomaly scanner
|
|
420
|
+
polymarket-markets.ts Polymarket market data tools
|
|
421
|
+
prediction-markets.ts Kalshi, PredictIt, Manifold data
|
|
422
|
+
dune-analytics.ts Dune Analytics query tools
|
|
423
|
+
blockchain-scanner.ts Blockchain transaction tracing
|
|
424
|
+
dexscreener-pairs.ts DEXScreener token pair data
|
|
425
|
+
wallet-clusterer.ts Wallet address clustering
|
|
426
|
+
sec-tools.ts SEC EDGAR, Form 4, whistleblower tools
|
|
427
|
+
political-finance.ts FEC, OpenSecrets, Congress disclosures
|
|
428
|
+
global-registries.ts OpenCorporates, OFAC, beneficial ownership
|
|
429
|
+
government-records.ts Court dockets, federal contracts, FOIA
|
|
430
|
+
social-intelligence.ts Twitter, Reddit, Discord, Telegram, news
|
|
431
|
+
advanced-analytics.ts Anomaly detection, centrality, arbitrage
|
|
432
|
+
document-processing.ts PDF extraction, similarity, sentiment
|
|
433
|
+
investigation-automation.ts Cross-reference, network expansion, compliance
|
|
434
|
+
monitoring-tools.ts Whale alerts, dark pools, filings, real estate
|
|
435
|
+
crypto-ecosystem.ts Gitcoin grants, evidence graph builder
|
|
196
436
|
```
|
|
197
437
|
|
|
198
438
|
## Development
|
|
@@ -202,7 +442,7 @@ npm install
|
|
|
202
442
|
npm run build # Compile TypeScript
|
|
203
443
|
npm run lint # Type-check without emitting
|
|
204
444
|
npm run dev # Run CLI via tsx (development)
|
|
205
|
-
npm test # Run tests
|
|
445
|
+
npm test # Run tests (vitest)
|
|
206
446
|
```
|
|
207
447
|
|
|
208
448
|
## License
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* asx-calendar-fetcher.ts — ASX Appendix 4C Reporting Calendar Fetcher
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* Fetches recent ASX quarterly activity / Appendix 4C announcements from
|
|
5
|
+
* the ASX Markit Digital API and outputs structured data for downstream analysis.
|
|
6
6
|
*/
|
|
7
7
|
declare const OUTPUT_COLUMNS: readonly ["ticker", "company_name", "quarter_end", "due_date", "lodged_date", "status"];
|
|
8
8
|
export interface CalendarEntry {
|
|
@@ -17,22 +17,9 @@ export interface PeriodRange {
|
|
|
17
17
|
start: Date;
|
|
18
18
|
end: Date;
|
|
19
19
|
}
|
|
20
|
-
/**
|
|
21
|
-
* Parse a period string into a date range for filtering.
|
|
22
|
-
*
|
|
23
|
-
* Supported formats:
|
|
24
|
-
* - next_30d, next_90d, next_NNd — from today through NN days ahead
|
|
25
|
-
* - Q1_2026, Q2_2026, etc. — quarter due date window
|
|
26
|
-
*/
|
|
27
20
|
export declare function parsePeriod(period: string): PeriodRange;
|
|
21
|
+
export declare function fetchAllAsxTickers(): Promise<string[]>;
|
|
28
22
|
export declare function fetchCalendarLive(): Promise<CalendarEntry[]>;
|
|
29
|
-
/**
|
|
30
|
-
* Fetch and filter ASX 4C calendar entries.
|
|
31
|
-
*
|
|
32
|
-
* @param options.tickers - Comma-separated tickers or "all"
|
|
33
|
-
* @param options.period - Period string (next_30d, Q1_2026, etc.)
|
|
34
|
-
* @param options.records - Pre-fetched records (for testing / offline use)
|
|
35
|
-
*/
|
|
36
23
|
export declare function fetchCalendar(options?: {
|
|
37
24
|
tickers?: string;
|
|
38
25
|
period?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asx-calendar-fetcher.d.ts","sourceRoot":"","sources":["../../src/investigation-tools/asx-calendar-fetcher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"asx-calendar-fetcher.d.ts","sourceRoot":"","sources":["../../src/investigation-tools/asx-calendar-fetcher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAYH,QAAA,MAAM,cAAc,yFAOV,CAAC;AAiCX,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;CAC3C;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,IAAI,CAAC;IACZ,GAAG,EAAE,IAAI,CAAC;CACX;AAwBD,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAsCvD;AA+ED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAuB5D;AAkDD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAQlE;AAID,wBAAsB,aAAa,CAAC,OAAO,CAAC,EAAE;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;CAC3B,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAqD3B;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
|