Commit Graph
152 Commits
Author SHA1 Message Date
turtle1999 4292020410 feat(plugin-market-generator): skip packages and versions marked private
A manifest with "private": true keeps its version out of the index. A Git
package that is private on the default branch is not listed at all, and the
generator warns when every bundle package of a repository is private. The
cache version is bumped so cached private releases are rebuilt.
2026-10-19 11:27:56 +08:00
Tianyi Cui cfb65d3bb2 fix: validate the Node 24.9 runtime floor 2026-10-15 23:33:49 +08:00
Yichen Jiang a0a04158f8 fix(models): keep reasoning edits with their model and mirror pi-ai refusals
The reasoning-level editor kept the levels it switched off, its row order,
and typed text in component state, while the model list keys rows by
position, so deleting a row handed that state to the next model: turning
the survivor's switch on wrote the deleted model's levels into it. The
editor now renders only from the model; rows follow the stored order,
switching on always starts from the defaults, and only the focused field
keeps its typed text until the field is left.

The reasoning check moves out of the shared model validator into the two
cards whose rows edit it, so DeepSeek and catalog routes are untouched,
and it now mirrors every pi-ai refusal: a valueless field, a missing value
on a level besides off, and an empty value. A refused value marks its
field, and leaving that field repairs it with the level name.

The Providers guide now points custom model API users to the page before
the YAML, and both package READMEs describe the new behavior.
2026-10-15 14:53:56 +08:00
turtle1999 434dc116f0 feat(plugin-market-generator): add a reference index generator
Generate a validated format-1 plugin market index from a list of npm package
names and https Git repository URLs, without running package code.

- List every non-deprecated npm bundle version, and Git versions at release
  tags and the default branch, each with its engines.dsh range.
- Read display fields, keywords, homepage, and icons the way DSH reads
  installed plugins; inline small icons up to the format's 32 KiB limit.
- Cache results per immutable input and rewrite output only when it changes.
2026-10-15 05:37:54 +08:00
turtle1999 b227127d62 fix(plugin-market): keep the Installed tab panel and list the markets bundle under More
The Installed tab panel now wraps its loading, unavailable, and empty states.
Custom plugin markets joins the bundles the More page holds back until the
profile enables them, and the repository field and its directory rule are
documented.
2026-10-15 05:37:44 +08:00
turtle1999 ab3bb74550 feat(plugin-market): carry a plugin's source repository
Indexes may give each plugin an optional repository: the web URL of its
source repository and the package directory inside it. The Discover entry
page links it as Source code, and the plugin_market tool returns it.
2026-10-15 05:37:44 +08:00
turtle1999 3de3a977e0 feat(plugin-market): add the Custom plugin markets bundle and Discover tab
Read configured plugin market indexes on the Host, search them with fuzzy
multilingual matching, and install a chosen version from the Plugins page.

- dsh-plugin-market-index validates format-1 indexes and builds install
  arguments; inline icons are capped at 32 KiB.
- The pluginMarket service fetches configured http(s) URLs, parses bodies in
  a Worker Thread, caches documents, and pages filtered, ordered results with
  installation status and engines.dsh compatibility.
- Discover is an opt-in experimental bundle; the Plugins page gains a
  plugins.tab slot and confirmed installs.
- The plugin_market tool lists indexes, plugins, and versions for Creator mode.
- Plugin compatibility reads engines.dsh before DSH peer dependencies.
2026-10-15 05:37:44 +08:00
Magolor 7110b615eb fix(llm): 生成提供方元数据并显示凭据检测状态 (#6106)
* fix(llm): generate provider metadata and clarify credential hints

* fix(settings): shorten credential hints and mark detected sources in green

* fix(llm): verify staged provider metadata and document regeneration

* fix(provider-metadata): reconcile authentication hints and key controls

* test(user-text): calibrate ratio headroom across unmatched workloads

* test(gates): include provider metadata in hygiene expectations

* fix(models): hide authentication hints for entered keys
2026-10-14 12:29:31 +08:00
LogosVeritas 00a007d833 Merge branch 'master' into feature/minimal-compact-image 2026-10-13 10:32:01 +08:00
Magolor 5249d9a4ce fix: prefer saved credentials and use environment keys in headless (#5483)
* ui: show locked API key environment reference

* fix(ui-settings-models): skip unused pi-ai credential reference

* fix(ui-settings-models): show active provider auth source

* test(llm): cover provider auth check failures

* docs(ui-settings-models): clarify active provider authentication

* test(web): update model key copy snapshots

* fix(ui-settings-models): clarify native authentication source hint

* fix: address PR 5483 review feedback

* docs(llm): state empty auth lookup behavior

* fix: refresh auth hints with credential snapshots

* fix: require credential refresh revision

* test: cover auth status projection

* fix: refresh catalog and browser expectations after rebase

* fix: keep auth status projection internal and explicit

* fix: preserve credential source checks with signed-in account rows

* test: pin Models authentication instead of inheriting host keys

* fix: prioritize stored credentials across providers

* fix: use one environment fallback hint

* docs: refresh credential contract

* docs: refresh config catalog

* test: align provider hint verification

* fix: use provider-native auth hints and endpoints

* fix: cover oauth-capable provider auth hints

* fix: show canonical endpoint defaults

* fix: avoid misleading endpoint fallback

* fix: label catalog endpoint defaults

* fix: shorten auth hints with hover details

* fix: clarify native auth resolution

* test: align DeepSeek endpoint hint

* fix: pair help button corner shape

* fix: address credential precedence review

Record the stored-credential precedence in a superseding Agent Note and
an upgrade guide, and align the credentials subsystem page, package
READMEs, and JSDoc with the order file > launch env > $cwd/.env >
$DSH_HOME/.env.

Report each pi-ai route's catalog endpoint and native-auth environment
names through the provider directory, check the names against the
installed pi-ai resolvers, and remove the llm/checkAuth and credential
describe operations that no Models page code calls.

Restore the route-derived key reference and the home expansion that
reads the home directory only for a leading ~.

* fix: clarify model authentication guidance

* fix: explain native provider OAuth requirements

* fix: keep authentication guidance method neutral

* fix: show credential reference source in model editor

* fix: use environment authentication in headless profile

* fix: validate headless authentication and current provider metadata

* test: retain authentication guidance coverage with account catalog updates

* test: retain writable Models credentials with the pinned environment
2026-10-13 10:10:06 +08:00
LogosVeritas 444692d1ca feat(preset): add image reading and compaction to sdk-minimal
Reuse read_image and automatic compaction in the standalone profile without
adding SDK slash-command handling. Update profile guidance, upgrade steps,
and startup and recorded-session coverage.
2026-10-12 12:11:18 +08:00
Yichen Jiang ad23ec9c3f Merge remote-tracking branch 'origin/master' into worktree/deepseek-account-models-ba9235
# Conflicts:
#	docs/module-graph.md
#	docs/module-graph.zh.md
#	packages/client/ui-model-selection/README.i18n.yaml
#	packages/client/ui-model-selection/README.md
#	packages/client/ui-model-selection/README.zh.md
#	packages/client/ui-model-selection/src/client/ModelSelect.tsx
#	packages/client/ui-model-selection/src/client/locales.ts
#	packages/client/ui-model-selection/tests/model-select.client.spec.tsx
#	packages/client/ui-settings-models/README.i18n.yaml
#	packages/client/ui-settings-models/README.md
#	packages/client/ui-settings-models/README.zh.md
#	packages/client/ui-settings-models/src/client/ModelsSection.tsx
#	packages/client/ui-settings-models/src/client/ProviderEditor.tsx
#	packages/client/ui-settings-models/tests/components.client.spec.tsx
#	packages/llm/llm-deepseek-account/README.i18n.yaml
#	packages/llm/llm-deepseek-account/README.md
#	packages/llm/llm-deepseek-account/README.zh.md
#	packages/llm/llm-deepseek-api-key/README.i18n.yaml
#	packages/llm/llm-deepseek-api-key/README.md
#	packages/llm/llm-deepseek-api-key/README.zh.md
#	packages/llm/llm-deepseek-api-key/src/index.ts
#	packages/llm/llm-deepseek-api-key/tests/discovery.spec.ts
#	packages/llm/llm-deepseek/README.i18n.yaml
#	packages/llm/llm-deepseek/tests/account-routing.spec.ts
#	packages/llm/llm-deepseek/tests/runtime.spec.ts
#	pnpm-lock.yaml
2026-10-12 10:40:30 +08:00
imccyu 2b229d4c0e fix(web): address review round on harness dev context
- WebServer.port reads number | undefined instead of masking the unbound
  listener with an assertion; tests that dial it narrow the bound port.
- LegacyPrompt stays module-private; the web-app type import is a
  devDependency only, since the emitted declarations never reference it.
- Copy: --public-url help names runtime context again, the public
  deployments guide, web-app JSDoc, Config.publicUrl consumers, the Agent
  Note matching rule, and three Known Limitations in the package README.
2026-10-12 01:42:45 +08:00
Yichen Yan ac080346f0 Support native HTTPS Web listeners 2026-10-08 19:49:01 +08:00
Yichen Yanandliukx0205 cb9a590c86 Support concrete Web listener bind addresses
Co-authored-by: liukx0205 <[email protected]>
2026-10-08 18:25:43 +08:00
Tianyi Cui 582c9ab7b7 fix(experimental): retain published names and centralize identity policy 2026-10-06 16:42:25 +08:00
Tianyi Cui 5990ccbb4a fix(experimental): align package guidance and platform source ownership 2026-10-06 16:41:35 +08:00
Tianyi Cui b48384223a refactor(experimental)!: classify optional packages and move prototypes 2026-10-06 16:41:04 +08:00
Yichen Yanandliukx0205 a7c3ad99bc feat(web): advertise a configured public application URL (#3972)
* feat(web): advertise a configured public application URL

* test(session): restore migration verifier prefix coverage

* test(llm): synchronize idle timeout with provider request

* Remove unrelated migration Worker lifecycle changes

---------

Co-authored-by: liukx0205 <[email protected]>
2026-09-30 17:46:52 +08:00
Chinesezjc 3e5231bc6f Merge origin/master into feat/preset-scoped-schedule-tools
Resolutions:
- `docs/subsystems/schedule.*` and `packages/client/ui-schedule/README.*` keep
  this branch's shipped-composition text with master's newer wording (Rules and
  Records tabs, the icon-button linked-session layout).
- `docs/event-producer-consumer.*` regenerated by `gen-doc-graphs`.
2026-09-30 13:49:30 +08:00
Chinesezjc 1b1b09e1fb fix(schedule): enforce the caller restriction in the tool layer
Review follow-ups on the delegated-child rule:

- Every one of the four tools refuses a delegated caller before dispatch,
  reading `delegationDepthOf(exec.agent)` and returning the stable
  `subagent_session` refusal, so `schedule_list`, `schedule_delete`, and a
  content-only `schedule_update` are covered too. The preset `toolFilter.deny`
  stays as the layer that keeps the tools out of a child's prompt.
- The service keys the arming refusal on that same delegation accounting
  alone; `hasApiSessionSubagentOwner` returns to package-private and
  `@deepseek-ai/dsh-schedule` no longer imports it.
- The preset child row is `time-context` again: the `preset-` prefix separated
  it from a Host row that no longer exists, and `verify-cordis-config` passes
  with the sibling-style id.
- Docs, Agent Notes, and the generated catalogs follow.
2026-09-29 16:57:25 +08:00
Chinesezjc 699f1a8dc1 feat(schedule): deny the reminder tools to delegated children
A delegated child could arm reminders through the tools its preset mount
passes down, even though delivery can never reach a child's Session. The
refusal now reads the delegation-depth accounting the delegation cap itself
enforces, and the shipped presets deny the four tools to children outright:

- `reminderTargetRefusal` refuses when `delegationDepthOf(agent)` is above
  zero, or when the Session is subagent-owned without a depth record.
- `standard`, `cordis`, and `ptc` set `toolFilter.deny` on both delegation
  rows, so the four tools leave a child's prompt and reject execution.

`create` still rejects and `update` still returns the non-mutating refusal.
2026-09-29 16:39:05 +08:00
Turtle d8f38c4ad6 fix(ui-schedule): keep linked Session focus and disabled tooltip
Render one Button for both layouts so crossing the fit threshold keeps focus,
anchor the tooltip on the wrapper so a disabled compact entry still names
itself, observe each tab, and rename the tab in the user and subsystem docs.
2026-09-29 16:23:52 +08:00
Chinesezjc c6dd905972 feat(web): ship the Schedule service and task page in the Web composition
The reminder stack no longer hides behind an optional experimental bundle.
`packages/bundle/web-app/cordis.patch.yml` inserts `schedule` and
`ui-schedule`, so a shipped profile mounts the task store, the delivery
runtime, and the Automation tasks page; the
`@deepseek-ai/dsh-experimental-schedule-bundle` package and its wiring are
removed.

Preset ownership is unchanged: `standard`, `cordis`, and `ptc` declare the
clock and the four reminder tools in their own scope, and `minimal` declares
neither, so a minimal session carries no reading and no reminder tool even
though the service is mounted.

`apps/cli` depends on `@deepseek-ai/dsh-tool-schedule`, and
`packages/bundle/web-app` declares `@deepseek-ai/dsh-schedule` and
`@deepseek-ai/dsh-client-ui-schedule`: preset and profile rows resolve plugin
names from the installation anchor, so a missing declaration leaves the row
without a fiber and every session creation fails with
`agent-preset/invalid`.

Documentation, Agent Notes, and the recorded Web fixtures follow the shipped
composition.
2026-09-28 18:31:53 +08:00
Chinesezjc 8d7ba898f8 Merge origin/master into feat/preset-scoped-schedule-tools
master now ships the reminder stack as the optional
`@deepseek-ai/dsh-experimental-schedule-bundle`, which inserts the rows the
Web composition leaves out. This branch keeps the preset-level ownership
beside it.

Resolutions:
- The bundle inserts `schedule` and `ui-schedule` only. It no longer inserts
  `time-context`: the clock belongs to the `standard`, `cordis`, and `ptc`
  presets, and a Host row for the same package would mount it in two scopes
  and append two readings per step.
- `packages/bundle/web-app/package.json` declares `@deepseek-ai/dsh-time-context`
  again: the presets reference it by bare name, so `verify-cordis-config`
  requires the dependency.
- The bundle's patch spec, locale, package, README pair, the optional-bundle
  composition spec, the plugin-manager component list, and the
  `schedule-after` roster assertions describe the two-row bundle and the
  preset-owned clock and tools.
- Documentation and Agent Notes follow the same split; the note master
  archived stays frozen with its manifest hashes.
2026-09-28 13:04:51 +08:00
Chinesezjc fd53e83125 Merge origin/master into feat/preset-scoped-schedule-tools
master now ships the reminder stack as the optional
`@deepseek-ai/dsh-experimental-schedule-bundle`; this branch keeps the
preset-level ownership beside it.

Resolutions:
- The Host rows keep master's `disabled: true`. The optional bundle switches
  `schedule` and `ui-schedule` on and no longer `time-context`: the clock row
  is preset-level, so flipping the Host row as well would mount the plugin in
  two scopes and write two readings per step.
- `standard`, `cordis`, and `ptc` declare `preset-time-context` and
  `tool-schedule`; `minimal` declares neither.
- `tool-schedule` injects `tools` and resolves `schedule` per scope through
  `ctx.inject`, so the row stays valid but produces no tools while the service
  is off, and produces them once the bundle mounts it.
- The assembled-Web Schedule spec keeps master's bundle overlay and restates
  the shipped `preset-standard` row instead of the deleted fixture, because a
  top-level patch cannot reach a plugin a preset declares.
- Documentation and Agent Notes describe both layers; the note master archived
  stays frozen with its manifest hashes.
2026-09-26 01:12:54 +08:00
ZiyaZhang 5511abfa14 Merge remote-tracking branch 'origin/ux/automation-tasks-plugin-row' into feat/schedule-bundle-owns-rows
# Conflicts:
#	docs/user/guide/schedule.i18n.yaml
#	docs/user/guide/schedule.md
2026-09-25 01:52:10 -07:00
ZiyaZhang d6ffaa0198 test(plugin-manager): pin the English Automation tasks row and write its label as text
The language-switch case now reads the Automation tasks row's English title
and description, and the English guide writes the UI label as plain text like
the rest of the guide.
2026-09-25 01:19:47 -07:00
ZiyaZhang 64a361ee44 feat(schedule-bundle): insert the Schedule rows from the bundle and list them on its page
The Web composition no longer carries `time-context`, `schedule`, and
`ui-schedule`. The optional bundle inserts the three rows and depends on their
packages, as the other optional bundles insert theirs, so the Plugins page lists
them under the bundle; `dsh.bundle.rowSwitches: false` keeps the bundle's own
switch as their only control. The three packages gain localized titles and
descriptions for that list.
2026-09-25 00:42:21 -07:00
ZiyaZhang 197355bb12 fix(schedule-bundle): name the Plugins row Automation tasks with an alarm clock icon
The row now carries the name of the sidebar entry it adds and a
plain-language description, and its icon is an alarm clock drawn in the
Official group's 36px style. The README and the user guide quote the new
title; the README names the sidebar entry instead of a right-sidebar page.
2026-09-24 23:08:48 -07:00
Chinesezjc 41c29fa832 feat(schedule): ship the Schedule switch as an optional bundle
The shipped Web composition carries `time-context`, `schedule`, and
`ui-schedule` disabled. This adds
`@deepseek-ai/dsh-experimental-schedule-bundle`, whose patch sets
`disabled: false` on those three rows and inserts none, and names it in
`OPTIONAL_BUNDLES` with a runtime dependency of `apps/cli`, so every
installation ships it switched off and the Web Plugins page offers it in
the Official group.

The two Web suites and the built-Web Schedule Remote scenario enable the
rows through that bundle instead of a scenario-local fixture.
2026-09-24 21:03:26 +08:00
Chinesezjc 656adfc986 feat(web): mount time-context from the presets that use it
`packages/bundle/web-app/cordis.patch.yml` inserted `time-context` as a Host
row, so every session in the shipped Web profile — `minimal` included —
received a per-step clock reading its composition never declared. The row
moves into the `standard`, `cordis`, and `ptc` presets; `minimal` mounts
neither the reading nor the reminder tools. The Schedule service row and the
`ui-schedule` client row stay Host-wide. 139a7eb379 carried the bundle,
preset, and runtime-closure half of this move; this commit carries the
fixtures, documentation, and Agent Notes that follow it.

The `minimal` session fixture is refreshed keylessly, the assembled-Web spec
builds its every-step overlay from the shipped preset because a preset plugin
cannot be addressed by id from a top-level patch, and the composition Agent
Note points at the new note that owns the preset-scoped reading.
2026-09-24 20:50:12 +08:00
Chinesezjc d02a959870 Merge origin/master into feat/preset-scoped-schedule-tools
Resolutions:
- `snapshots/web/minimal-preset/tool-schemas.expected.json` keeps this
  branch's side: the four reminder tools are absent from a `minimal` session
  under the new composition, so master's description refresh of those entries
  does not apply.
- `packages/schedule/tool-schedule/src/index.ts` keeps this branch's plugin
  shape and ports master's trimmed tool descriptions (20bea14129) onto the
  moved definitions; `docs/tool-catalog.md` is regenerated from them.
- `docs/tool-catalog.zh.md` has its schema code block realigned with the
  regenerated English side, and the pairing record is re-recorded.
2026-09-24 20:20:33 +08:00
Yichen Jiang 193f9ce413 fix(llm): keep oversized request extensions from blocking model requests (#5168)
Optional request extension fields had no size bound. A very large field
could exceed the runtime's string limit while the request was serialized,
which failed every attempt, including retries.

- Bound the extension payload carried by one request (8 MiB by default,
  configurable) and send the remainder with later requests.
- If the combined request still cannot be serialized, send the base
  request without extension fields and log which fields were omitted.
- Add regression tests and update the related references and decision note.
2026-09-24 11:15:37 +00:00
Chinesezjc 6c1a590a4c feat(schedule): contribute the reminder tools from a preset-scoped package
The Host plugin registered `schedule_create`, `schedule_list`,
`schedule_update`, and `schedule_delete` on every live root Agent, so a
`minimal` session received four reminder tools its preset never declared. The
tools move to the preset-scoped Consumer `@deepseek-ai/dsh-tool-schedule`,
which injects `tools` and `schedule` and registers them in the scope that
mounts it: `standard`, `cordis`, and `ptc` carry the row, `minimal` does not.
`@deepseek-ai/dsh-schedule` keeps the Host service, storage, delivery, and the
Automation surface.

The five `minimal` assertions in the Web preset suite and the `minimal-preset`
tool-schema snapshot return to the bash-only table, the tool catalog is
regenerated under the new owner, and the Agent Note that recorded the previous
composition points at the new one.
2026-09-24 18:39:00 +08:00
Chinesezjc e896737840 feat(schedule): ship Schedule in the default Web composition
The Web bundle now mounts `time-context` and `schedule` and leaves the
`ui-schedule` client row enabled, so the Automation tasks page, the Session
reminder catalog, and the `schedule_*` tools work without an overlay. Both
packages join the bundle's declared dependencies, and the example overlay is
deleted: re-inserting its rows would mount both Host plugins twice.

The fixed-rate floor drops from 300 to 60 seconds across the Host decoder,
the create and update validation, the model-visible tool schema, and the
client's per-unit floors.

Web recorded sessions and header sidecars are refreshed for the readings
`time-context` now appends; `normalizeWebSessionVolatiles` tokenizes their
sampled instant, browser zone, and elapsed duration so replay stays stable.
2026-09-24 16:11:52 +08:00
Yichen Jiang 5dd772d537 docs(llm): document the DeepSeek account listing, overrides, and version gate 2026-09-24 13:20:44 +08:00
Chinesezjc 7a362b263b Merge pull request #4335 from deepseek-harness/feat/schedule-storage-phase1
feat(schedule): persist tasks and resume due sessions
2026-09-23 23:33:33 +08:00
Turtle e7def469e1 feat(i18n): key translation pairing records by heading section (#5036)
* feat(i18n): key translation pairing records by heading section

Replace the whole-file blob hashes in *.i18n.yaml with one entry per
heading section that still holds language-specific content, keyed by the
English heading-slug path. Blocks identical across the pair (generated
table rows, code blocks, shared regions) stay out of the hash, so edits to
different sections and identical regenerations merge with Git's default
text merge, including on GitHub.

Remove the dsh-translation-pairing merge driver, its resolver command and
installer wiring; gen-translation-brief recovers last-confirmed text from
commit history. Migrate all active records, archive the superseded Agent
Note, and record the replayed conflict reduction in the new one.

* test(i18n): refresh translation prompt snapshot for the terminology note

* feat(i18n): exclude only code blocks and generated regions from pairing records

Replace byte-equality masking with an explicit rule: a record hash skips
fenced code blocks and BEGIN/END GENERATED regions, the two kinds of
content the pairing gate already requires to be identical on both sides.

Move generated data into regions written into both pages:
gen-config-catalog renders both languages and the record with per-package
regions labelled by code identifiers; gen-module-graph keeps its table in a
region; gen-doc-graphs splices the event matrix regions into the Chinese
page. Add a generic region splice beside the region grammar.
2026-09-23 22:32:06 +08:00
Yichen Jiang d459183f32 docs(settings): correct provider configuration paths and examples 2026-09-22 14:28:46 +08:00
Turtle 601d6761e4 feat(settings): project volatile Config through profile-backed forms (#4587) 2026-09-21 18:26:03 +08:00
Yichen Jiang 8a320a276b feat(settings-models): one add entry with third-party and custom-API modes
The Models page offered two side-by-side buttons, "Add provider" and
"Add a custom provider", which asked a new user to classify their
provider by an implementation fact — whether it is in the installed
pi-ai catalog — before seeing anything. One "Add model provider" button
now opens one card whose segmented mode switch chooses between a
third-party model provider (the catalog select over the provider
editor) and a custom model API (the create form for a relay, a
self-hosted server, or any other OpenAI- or Anthropic-compatible
endpoint), with a one-line purpose beneath the switch. A panel mounts
the first time its mode is shown and stays mounted, hidden, while the
card is open, so switching modes discards neither draft.

A mode is offered only while its namespace is mounted and disabled
while it has nothing to offer, which keeps the old per-button
availability; with one mode the card shows that form alone. The
protocol pickers name each protocol by its product name while the
stored value stays the schema identifier, and an unnamed protocol shows
that identifier. The Chinese copy of this page calls a provider 提供商
throughout.

The e2e scenarios drive the single entry and its custom-API mode, and
the ARIA goldens that carry the page copy are re-recorded. The user
guide describes the one entry with fresh screenshots in both languages.
2026-09-19 15:14:52 +08:00
gengruilin 4ab1fc3bfe Merge master into feat/docs-platform-command-tabs 2026-09-17 17:11:07 +08:00
Yichen Jiang f5683559a5 fix(web): isolate model settings tests and update input guide 2026-09-16 15:33:50 +08:00
gengruilin 7aca916679 fix(docs): keep platform commands readable in MPA builds 2026-09-15 19:30:58 +08:00
gengruilin bcb49ade82 feat(docs): add independent platform command tabs 2026-09-15 15:51:26 +08:00
creatixchu 31ec6bc7e3 fix(session): keep upload defaults independent of test runners 2026-09-14 21:15:42 +08:00
Tianyi Cui 7c9bb5914c refactor(ptc): align runtime packages and services with PTC naming 2026-09-12 15:03:04 +08:00
Tianyi Cui 8e19ec4962 feat(code-runtime): complete sandboxed Node execution and Session fixtures 2026-09-12 15:03:01 +08:00
Yichen Jiang bc5fd3b8dc feat(llm): default Chat Completions to DeepSeek V41 Flash 2026-09-10 03:39:56 +08:00