Skip to content

Releases: Realyujie/dsh-us-stocks

Release list

v0.3.0

Choose a tag to compare

@Realyujie Realyujie released this 16 Aug 15:17

[0.3.0] - 2026-08-17

Added

  • get_quote returns fund detail for ETFs and mutual funds: expense ratio
    against its category average, net assets, category, issuer, asset
    allocation, trailing returns, and top holdings with the share of the fund
    they cover. Observed without it: asked to look at XLK, the agent called this
    plugin, found no expense ratio or holdings, and fell back to web_search
    for exactly those two — which returned link titles and no content, spending
    9.4s of a 27s answer and an extra step to learn nothing. The expense ratio
    then went unmentioned, and the holdings were recited from memory in the
    wrong order.

    The extra call fires only once the quote reports a fund, so equities are
    unaffected; a fund quote costs roughly three times an equity one. If it
    fails the quote is still returned, with a warning, since the price is
    already in hand.

    Mutual funds are covered alongside ETFs. They report the same modules, and
    gating on ETF alone would have dropped every VFIAX-shaped symbol.

  • fund_notes in fund responses, carrying three caveats where the numbers are
    read rather than only in the docs: that trailing_pe and its neighbours are
    holdings-weighted aggregates for a fund (a model was seen calling an ETF's
    P/E an expensive valuation, with nothing to suggest otherwise); that the
    expense ratio is upstream's and can be wrong (FXAIX reported 0.42% against a
    true 0.015%); and that the holdings list is capped at ten, so fund overlap
    cannot be derived from it. Each note appears only when the field it
    qualifies does — commodity and bond funds report no holdings at all.

    fund_trailing_returns_percent names its own convention: upstream reports
    ytd through one_year as the return over that window but annualises
    everything longer, so those keys end in _annualized. Verified against SPY,
    whose reported five-year 12.76% is the annualised form of an 83.95%
    cumulative — read as cumulative it is wrong by a factor of four.

  • get_ownership, a sixth tool: the insider/institutional split, the largest
    institutional and fund holders with their quarterly position changes, and
    insiders' aggregate buying and selling over six months. detail: "full"
    adds individual insider filings and the named insiders; those are most of
    the payload, so they are opt-in and the summary modules are all that get
    requested otherwise.

    Measured before building it — asked "have insiders been buying or selling"
    and "who is buying this stock", the agent made no plugin call and ran 11
    web_search calls across six steps, 102.5s for the two questions. It
    arrived at 65.7% institutional ownership from a scraped page dated five
    weeks earlier against Yahoo's 68.85%, never mentioned the 8.87% insiders
    hold, and built "insiders are selling" out of one large filing while the
    six-month aggregate was net +456,643 shares.

    institutional_activity is a sibling of insider_activity rather than a
    member of it. Upstream returns both from one module, and following that
    shape gave a path — insider_activity.net_institutional_shares — whose name
    said insiders and whose value was institutions. Only the insider block
    carries a period; upstream never states the window its institutional net
    spans, so this does not either.

    ownership_note states that holder rows are as of their own report_date
    and that the six-month aggregate can be net positive while one insider was
    visibly selling — the reconciliation a model would otherwise have to guess
    at. Filings are made against operating companies, so ETFs and funds return
    no_data pointing at get_quote for a fund's own holdings.

Fixed

  • get_analyst_view relayed upstream's "No fundamentals data found for
    symbol: XLK" for funds, which reads as a fault rather than as permanent.
    It now explains that analysts rate companies and funds therefore carry no
    ratings, targets or estimates, matching how get_financials already answers
    the same question about statements.

Notes

  • ^0.2.0 does not admit 0.3.0 under semver's caret rule for 0.x, so
    dsh plugin update will not pick this release up. Install it explicitly:

    dsh plugin --profile web add dsh-us-stocks@0.3.0