Repository navigation
Releases: alex2loop/openalpha
Release list
v1.2.1
VN market holidays are now worked out from the law for every year, so 2027 and later need no update
from us. Scheduled jobs ride out a short network outage instead of switching themselves off, and a
job whose time passed while the daemon was down waits for its next time rather than running late.
The office page and API answer within about a second of start, instead of after up to a minute of
loading market data, and a slow Telegram or Zalo no longer holds the start. A busy API port no longer
stops the daemon. Several sizing and booking figures now include fees
the way the order path charges them.
Ngày nghỉ của sàn VN giờ được tính theo luật cho mọi năm, nên từ 2027 trở đi không cần chờ bản cập nhật. Việc theo lịch không còn tự tắt chỉ vì mất mạng vài phút, và việc lỡ giờ khi dịch vụ nền đang tắt sẽ đợi lần kế tiếp thay vì chạy trễ. Trang văn phòng và API trả lời trong khoảng một giây sau khi khởi động, thay vì phải chờ tới một phút nạp dữ liệu thị trường, và Telegram hay Zalo chậm không còn làm chậm cả lúc khởi động. Cổng API bị chiếm không còn làm dịch vụ nền dừng lại. Một số con số về khối lượng và ghi sổ giờ đã tính phí đúng như khi đặt lệnh.
Calendar
- VN closures follow Labor Code art. 112: New Year, Tet (with the usual days around it), Hung
Kings, 30/4, 1/5, National Day and its adjacent day, and Vietnam Culture Day from 2026, plus the
next weekday when one falls on a weekend. Swap days the government announces go under
[trading.markets.<id>] holidays; the newopen_daysreopens a day the rules close. A date in
both lists, or on the market's weekend, stops the start. - The "holiday table is out of date" warning is gone: there is no table to run out.
- Checked against the real tape for 2020-2025: 29 April 2024 (a swap day) is closed, and National
Day 2021 took its second day on 3 September, not 1 September.
Scheduler and delivery
- While the host is offline, due jobs wait and no failure is counted; only real failures still
switch a job off after three in a row. - A cron job more than
[schedule] late_grace_ms(15 minutes) late skips to its next time; interval
and one-time jobs still run. The intraday report skips a send it woke too late for. - At shutdown, channels stop taking new messages at once (they wait for the next start) and queued
notices get their one last attempt before the channels close. A reply cut by the restart says so
instead of showing an error. - A message Telegram or Zalo refuses for good is not retried.
- An API port already in use is reported as a degraded item; the daemon keeps running.
- Start-up no longer waits for market data: the API binds first and
GET /v1/healthreports
startinguntil the daemon is ready (writes and live streams answerunavailablemeanwhile).
The boot refresh runs in the background; only the trading loops that read market data wait for
its first pass, for at most a minute. - Telegram and Zalo check their token once at start; a slow network is retried by the polling loop
instead of holding the start, and the Telegram command menu is installed in the background. A
wrong token is still reported at start. status,startand every other command list all the config problemsconfig validatelists,
not only the first section's.- With a config that cannot be read,
doctorchecks only config, daemon and version and marks the
rest as waiting, instead of reporting on the defaults (doctor web-searchshowed duckduckgo ✓). /profile set reserve-pct-nav 5names the allowed range instead of a message about pinned targets./reflectcalls a repeated suggestion a suggestion, not an order.webandconnectsay why the daemon has no API (its port taken by another program, say)
instead of reporting a refused token from whatever holds that port.- A run that stops on something you can fix, such as an unset key, is logged as a warning, not an
error. - A terminal command sent while the daemon is still starting waits for it, then runs there, instead
of running a second copy of the work (a/refresh, say) in the terminal.
Trading
- A plan made from a recorded fill on or after an ex-date is priced on the new basis, and a plan
is only scaled by the ex-dates it has not absorbed yet. Same-day cash and share actions give one
reference price whatever order the provider lists them in. - Averaging down no longer counts a dividend with no published amount as zero, and says when some
dividends could not be counted. - The reminder to record a dividend is built from every event, not only the ones the brief shows.
- An OKX rebate books as no fee; a Binance fill whose trades are not listed yet waits for
/record syncinstead of booking a zero fee. - A buy into a switched-off segment shows as a cap breach and
order_placerefuses it. - Suggested buys and the batch cash check leave room for the fee, plus the price drift a market
order may fill through on an exchange/tradereaches;/rebalanceleaves room for the fee. - One name with zero turnover no longer withholds the whole
/rebalanceplan.
Office page and API
- The ticker card now really shows a corporate action's terms (1.2.0 promised them but showed only
the payment day): cash per share, new shares per 100, subscription price and payment day. - On a held position, a first exit that sits under your cost reads "Trim on a rebound to ..., still
below your cost" instead of "Take profit". - The VN event note groups its figures the Vietnamese way (
2.250.000 CP,10.000 đ/cp) instead
of the provider's2,250,000and bare10000. - The sign-in lockout has its own error code,
locked; other refusals show their reason, and a
sign-in link survives a daemon that is restarting. - Too many open tabs reads as such, not as offline.
GET /v1/healthno longer carries astatusthat was alwaysready.- A request the client already dropped is answered 499 and logged at debug.
POST /v1/respondanswersnot_foundfor a request that is no longer waiting, instead of a
silent ok.- Chat history pages never start in the middle of a turn; rate-limited commands are not stored;
deleting a chat also removes its agent binding.
v1.2.0
Plans and exit alerts now follow a held VN stock across its ex-dividend date, so a dividend gap no
longer reads as a stop being hit. On the office page, buttons run their command right where you
press them, chat history keeps the commands you typed, and CLI chats can be deleted from the
sessions list. Three database changes; the upgrade runs them for you.
Kế hoạch và cảnh báo thoát lệnh giờ theo đúng mã đang giữ qua ngày giao dịch không hưởng quyền, nên khoảng giảm giá do chia cổ tức không còn bị đọc nhầm là chạm mức cắt lỗ. Trên trang văn phòng, các nút chạy lệnh ngay tại chỗ, lịch sử trò chuyện giữ lại các câu lệnh bạn gõ, và xóa được cuộc trò chuyện CLI ngay trong danh sách. Có ba thay đổi cơ sở dữ liệu; lệnh nâng cấp tự chạy chúng.
Ex-dividend dates
- On a cash dividend's ex-date,
/suggestscales the stored bars and the standing stop and
take-profit by the dividend, so the morning plan and the exit alerts stand on the new price. A
share dividend, bonus issue or rights issue is priced the way the exchange sets the reference
price; an action with no published terms starts that day's plan fresh. - The brief's events and the ticker card show the terms: cash per share, share ratio,
subscription price and payment day. A held name with a dividend or share distribution gets a
line reminding you to record it. - Averaging down no longer reads every ex-date as a loss: the cost it compares against nets out
the dividends your shares already earned. - vndirect share dividends and bonus issues are labelled as such, not as splits.
The office page
- A button that names a whole command runs it at once and waits in place while it runs. Refresh
data, Write today's brief again, Run again on Themes and Screen again show their result where
they sit and leave nothing in the chat; a refusal before the run starts shows under the button. - Analyze buttons on the ticker card, Opportunities and a
/suggestanswer offer a fresh
analysis once a call is stored. - The sessions list dates each chat by its last message and counts exchanges. Each row's menu
opens the chat in its own tab or deletes it (app and CLI chats, with Undo for a few seconds).
New messages from another channel show up while you read it. - A cleaner why dialog and folded panel rail. A half-typed line survives a button press, and
Enter while Safari composes a word (Vietnamese input) finishes the word, not the line. No cost
estimate beside buttons.
Chat history
- Commands you type are kept in the chat's history on every channel and shown as they first
appeared, with the AI calls under an answer. The assistant never reads them back. - Scrolling near the top loads older messages.
Smaller changes
- An order the ledger has not booked yet shows what the exchange filled, with the average fill
price, in/trade status,/trade reconcileand the Orders tab. - A sale held back by settlement says so, instead of calling it smaller than a board lot.
- Startup refuses a
[trading.briefs] send_timeat or after the home market's open; the brief
used to be skipped every morning. - A broken
config.tomlexits 2 on every command./costprints money and tokens like the run
footer. openalpha db importreads exports from older releases, columns dropped or added since
included.
Upgrading
- A new column marks command turns kept for display, columns nothing read leave
memory_kv,
notices,runsandtrading_profiles, and sessions get an indexed last-message time. Older
binaries cannot open the upgraded database;openalpha upgrade --rollbacktakes it back after
anopenalpha upgrade.
v1.1.2
The office page's first-run checklist names the key your configured model reads, not another
provider's. No database change.
Danh sách việc cần làm lần đầu trên trang văn phòng giờ ghi đúng tên khóa mà mô hình bạn cấu hình đọc, không còn ghi tên khóa của nhà cung cấp khác. Không đổi cơ sở dữ liệu.
Changes
- "Connect an AI model" names the variable the first model in
[[models]]reads its key from.
A model that signs in instead points to Settings > Providers.
v1.1.1
The office page now opens with no config edit: the API is on by default, still on 127.0.0.1
only. A second daemon on the same port stops with a clear message instead of sharing it. No
database change.
Trang văn phòng giờ mở được mà không cần sửa cấu hình: API bật sẵn, vẫn chỉ nghe trên
127.0.0.1. Dịch vụ nền thứ hai dùng cùng cổng sẽ dừng kèm thông báo rõ ràng thay vì dùng chung cổng. Không đổi cơ sở dữ liệu.
Changes
[api] enableddefaults totrue; set it tofalseto keep the port closed.openalpha start --backgroundthenopenalpha webis all the office page needs.- Two daemons pointed at one
[api] portno longer share the socket silently: the second stops
and says to runopenalpha stopor pick another[api] port. - The starter config no longer writes
[api] enabled = true.
v1.1.0
A new office page: your analysts work in a pixel-art office you open in the browser, with your
book, ideas, markets, costs and chat beside it. The daemon now serves it, along with a /v1 API
for client apps. Six additive database changes; the upgrade runs them for you.
Trang văn phòng mới: các nhà phân tích AI làm việc trong một văn phòng pixel mở bằng trình duyệt, bên cạnh là danh mục, đề xuất, thị trường, chi phí và khung chat. Dịch vụ nền giờ phục vụ trang này cùng API
/v1cho ứng dụng khách. Có sáu thay đổi cơ sở dữ liệu kiểu thêm mới; lệnh nâng cấp tự chạy chúng.
The office page
openalpha webprints a one-time sign-in link;openalpha connectsigns in another device.
Signed-in browsers are listed, andopenalpha api rotatesigns them all out.- A 2D and a 3D office show every run as it happens: who is working, the step it is on, its
AI calls and its result on the room's whiteboard. Click a person or room for details. - The info panel has Today, Portfolio, Ideas and Market tabs. Office, Info only and narrow-screen
layouts share one floating command bar; the chat sits beside it. - The command bar suggests commands and arguments; forwarded commands run in the daemon like
local ones. - Approvals and questions from every channel, scheduled jobs and the AI cost report (daily chart,
per-run calls) are on the page. You can also record dividends, splits, rights and transfers,
reconcile with venues and sync fills there. - Light and dark themes, keyboard shortcuts, screen-reader text and touch layouts.
Daemon and API
- An HTTP/WS API under
/v1(off by default,[api]), with a bearer token fromopenalpha api token. With[api] public_urlset it withholds shell, file writes, external tools, pairing
approval and orders. - Live run feed, notices with read state, event-triggered jobs, agents created and edited from
the API, and aspawntool for temporary child agents. restartrestarts in place;doctorshares the CLI probes and prints fix lines; the update
notice shows release notes.
Smaller changes
openalpha mcp install --host museadds Muse Code.- Raising
reserve-pct-navpast the cash target lifts the target with it; a cash target set
below the reserve is refused. schedule showleaves out the next run of a paused job.- Vietnamese text now says "dịch vụ nền", "mô hình", "cuộc trò chuyện" and "phiên chạy"
throughout.
Upgrading
- New tables for runs, notices, job event triggers and browser sessions, plus new columns for
debate models and run tickers. Older binaries cannot open the upgraded database;openalpha upgrade --rollbacktakes it back after anopenalpha upgrade.
v1.0.17
/themes run <id> reports on one theme, an ended theme says why and what to do, a leftover
sliver no longer blanks NAV, and the chat agent no longer sees your loss figures. No database
change.
/themes run <id>giờ báo cáo riêng một chủ đề, chủ đề đã kết thúc nói rõ lý do và việc cần làm, phần cổ phiếu lẻ còn sót không còn làm trống tổng tài sản, và trợ lý chat không còn thấy số lỗ của bạn. Không đổi cơ sở dữ liệu.
Themes
/themes run <id>reports on that theme alone, its sectors and companies included.- An ended theme is labelled "Ended", hides its odds, says why and suggests
/themes retire <id>. - A proposed theme lists every condition that would end it, each naming a figure and a period.
- The track record and "was" compare only scores made the same way.
- A failed sector check keeps the previous sectors, dated; low-confidence names stay under their
sector instead of ranking among the top stocks. - Macro and quarter lookbacks are more careful, and each run reads headlines archived since the
last one.
Suggestions, portfolio and alerts
- The report the chat agent relays drops your realized loss and how far a holding sits under
cost. - An unpriced sliver below the venue's smallest order counts at cost instead of blanking NAV.
- Adding to a held name no longer counts against
maximum_open_trades. - A segment with a target and nothing held now reports its drift.
/updatekeeps a row's note and exit leg.- Track record, calibration and debate history fold repeated calls and stay within their focus.
- Exit alerts at an existing level no longer fail every minute; a missing price series is
retried every 15 minutes. /profile set preferred-localeis gone: replies always follow[locale] language./watchlistand/alertshow progress;key setsuggests the name your config reads.
Docs
- Fixed several command descriptions that had drifted from the code.
v1.0.16
VN funds are now treated as index trackers, /rebalance sells a holding back to its cap and says
why a sale has to wait, and a call served again later in the day tells you when your book has
changed since. No database change.
Quỹ ETF VN giờ được đối xử đúng là quỹ bám chỉ số,
/rebalancegiảm bớt mã vượt trần và nói rõ khi lệnh phải chờ, còn đề xuất được dùng lại trong ngày sẽ báo khi sổ của bạn đã đổi. Không đổi cơ sở dữ liệu.
Rebalancing
- A holding past its per-name, fund or sector cap by more than the 5/25 band is sold back to the
cap (over-cap), even when its score is neutral. A name on your exclusion list is trimmed too. - A sector over its cap gives back its weak-scored names first and whole; if that is enough, the
other names keep their weight. - A sale held back says why: not enough has settled yet, or the name trades too thinly to sell in
one go. - When a fund or sector cap is what left a segment short, the names offered sit outside that cap.
VN funds
- A fund gets a review level 3 ATR away with a 3:1 reward, is never counted in a sector and is
never sold for a weak score; the segment's core stays with the fund you hold unless another
leads by a clear margin. - Fund scores read the index the fund tracks and say when that index is behind.
Suggestions and the brief
- Scores read the same everywhere, and
/themesexplains its 0-100 score. /suggestand/briefname the plan's own reason for a sale; a sale under the plan's rules is
no longer held back by a side claim in the debate, and the debate is told which cap was passed.- A call served again after you record a trade or a deposit says the book has changed, and the
brief lists those names with/suggest <ticker> force.
Fixes
- A held fund no longer raises "sector unknown".
- The chat agent gets the same "factors disagree" wording as the CLI.
- The brief no longer repeats
/rebalance's own notes.
v1.0.15
A VN stock you hold that closes at its ceiling is now proposed for a trim at the next open, and a
held name no longer loses its exit plan when a later run that day sells or cannot price it. No database change.
Cổ phiếu VN bạn giữ mà đóng cửa ở giá trần giờ được đề xuất bán bớt ngay phiên mở cửa sau, và mã đang giữ không còn mất kế hoạch thoát khi một lần chạy sau trong ngày đề xuất bán hoặc không tính được giá. Không đổi cơ sở dữ liệu.
Selling a held name
- New reason
ceiling-close: a VN stock in a short-horizon segment that closed at or just under its
ceiling is proposed for a trim of your first take-profit share at the next open, while the gap is
still there. - A sale smaller than one board lot says so, instead of saying you already sold.
- A held name the system wants to sell but holds says why the sale was due.
- When a trim and an evidence reason sell the same number of shares, the evidence reason is named.
- A name blocked at the ceiling or floor, or by full foreign room, says which.
- The brief says why each held name is reduced.
Exit plans
- A sale or an unpriced run on the day you record a buy keeps the rest of the position on its exit
plan, so stop and take-profit alerts keep watching it. - A holding with only a stop or only a take-profit counts as watched.
Your book
/updatetakes a bare ticker the way/recorddoes; the other fields stay written out.
Dividend, split and distribution lines take a bare ticker too./updateof a USDT row asks forfxonly where the rate changes the book.- A crypto sale whose fee was taken in the coin is booked instead of skipped.
Fixes
- A shared cost cap covers a whole workflow run, and the spend estimate no longer counts the prompt
twice. - A reply cut off at the length limit keeps the text it had.
- Tapping an approval while its prompt is still sending now updates the prompt.
- The agent's
hostslist also limits pagesresearchreads directly. /schedule editkeeps the job's timezone;onboardkeeps the newest 5 config backups.- One-letter and digit-leading crypto symbols (
S,1INCH) are recognized. [trading.alerts] breakout_sessionsmust be at least 5.
v1.0.14
A VN quarter now reaches the analysis the evening its income statement lands, even before its cash
flow does. The missing cash flow is filled from CafeF when its figures check out against the
quarters already on file, and the analysis says when a quarter's cash flow is missing or a quarter
is late. The assistant also asks before changing a preference it already remembers.
Một quý của cổ phiếu VN giờ vào phân tích ngay buổi tối kết quả kinh doanh được công bố, kể cả khi chưa có lưu chuyển tiền tệ. Phần còn thiếu được điền từ CafeF khi số liệu khớp với các quý đã có, và phân tích nói rõ khi quý thiếu lưu chuyển tiền tệ hoặc quý đến hạn mà chưa có. Trợ lý cũng hỏi bạn trước khi đổi một sở thích nó đã ghi nhớ.
Changes
- A quarter filed with a balance sheet and income statement is kept without its cash flow; its cash
figures and the four-quarter cash totals stay blank rather than read as zero. - The new
cafef-statementssource supplies that cash flow, worked out from CafeF's year-to-date
table, and only when its pre-tax profit matches the quarters already stored. - Two new notes on the accounts: a quarter is missing its cash flow, or the latest quarter is past
its filing deadline and not in yet. - The "results are due" note now also shows on the deadline day itself, in suggestions and the
morning brief. - Changing a preference the assistant already remembers no longer goes unheard: it asks you once
in its next reply, and saves the change when you agree.
v1.0.13
Security and reliability fixes. The agent now asks before opening a web link it put together
itself, which closes a way a page could carry your holdings out in a link. upgrade --rollback
also takes the database back, a scheduled job hit by the spend cap is no longer switched off, and
a VN sale can no longer exceed what you hold.
Bản sửa lỗi bảo mật và độ ổn định. Agent giờ hỏi bạn trước khi mở một link do nó tự ghép, chặn đường một trang web có thể mang danh mục của bạn ra ngoài qua link.
upgrade --rollbackđưa cả cơ sở dữ liệu về bản trước, việc định kỳ chạm trần chi phí không còn bị tắt, và lệnh bán cổ phiếu VN không thể vượt số bạn đang giữ.
Fixes
upgrade --rollbacktakes the database back to what the previous release reads before swapping
(it asks first), and so does the automatic rollback after a release that will not start. A release
older than the database's schema refuses to start instead of misreading it, and says how to get
back;doctorfails the database check for it. A reinstall of the same release with the install
script no longer makes--rollbackundo that release's own migrations.db migrate down --to <id>undoes every migration after<id>.- A scheduled job stopped by the daily, monthly or agent spend cap, or by the rate limit, is no
longer counted as failing and switched off after three tries: it waits for the cap to reopen. - The agent asks before reading a web link it built or changed itself, one it adds headers to, or
any page past[loop] max_unasked_fetchesin a run (10 by default). Links you send and links a
search or news read brought back open as before; text you forward, and a task one agent hands
another, do not count as yours. This closes the way a hidden instruction on a page could carry
your holdings or notes out in a link. - An MCP client calling a withheld tool by name over the HTTP API (
delegate,research,
social_requestand the rest) is told it does not exist, as over stdio. - A sale of VN shares can no longer exceed what you hold, even by a few shares; the small margin for
an exchange's rounding stays for coins bought with the fee taken in the coin. - VN prices scaled from thousands of dong land on the exact price step (4.03 reads 4,030, not
4,030.0000000000005), so a bar that touched a stop is read as touching it. - Outbound requests also refuse
localhost.and other blocked names written with a trailing dot,
and IPv6 forms that carry a private IPv4 (::ffff:0:a.b.c.d) or the old site-local range. - Two starts racing over a stale pid file are much less likely to delete each other's claim.
db restorekeeps a whole safety copy of the old database even when another reader blocks the
WAL fold: the WAL moves with the copy instead of being dropped.- A daemon still starting after 90 seconds, often busy updating a large database, is left running:
upgradeno longer rolls it back while it starts. - A segment with a 0% target opens no new position (the conservative level ships crypto that way);
held names keep their exits. - The VN gold premium and its rank both read the SJC bar, the form the stored history holds.
- A crypto funding read with a missing leg is retried instead of being kept for the whole day.
- OKX lists only instruments that are trading.
- The brief's position exits skip review-only stops and a take-profit already banked, and a crossed
exit alert still waiting to send is no longer dropped when its plan changes. - A run that stops before answering no longer repeats the previous answer, and a scheduled job's
history shows what that run alone cost. - An OpenRouter "no endpoints" or moderation refusal no longer disables a model or the provider.
/approve,/denyand/pairin chat accept any letter case and the@botform;/stopworks
with slash commands off; Telegram's plain-text fallback no longer shows markup.db restorekeeps every replaced database inbackups/,db reset --yesstill backs up first,
PostgreSQL refuses to resetpublic, anddb exportnever deletes a folder it did not create.- Saving config from the API keeps the previous file beside it.
- The installers check the pinned version strictly, and a failed Windows install reports failure.