Commit Graph

138 Commits

Author SHA1 Message Date
kashorin 68f1693645 refactor: publish video-domain packages independently for 0.3.1 2026-10-09 18:13:50 +08:00
kashorin 4bcda61494 fix: preserve cross-platform release diagnostics 2026-10-09 01:44:00 +08:00
kashorin f946760a3f docs: finish the 0.3 public documentation audit 2026-10-09 01:07:26 +08:00
kashorin 25520fecdf refactor: compose CLI and Studio from owned capabilities 2026-10-07 20:45:22 +08:00
kashorin 205bfeb98d refactor: establish the adaptive composition model 2026-10-07 20:44:28 +08:00
Sharky Wang 32baae6dfd fix(cli): resolve packages status the way a Build resolves (#361)
`packages status <name>@<version>` read the machine package home and nothing
else, while the loader finds an external package in two places: the
node_modules chain above whoever requires it, and the machine home addressed by
the version that requirer declares. A package installed where the first half
looks — a pnpm workspace's own node_modules, or the global node_modules a
`npm i -g @hypit/hypit` shares with a `npm i -g @hyperframes/engine` — was
reported `Ready false` and exited 1, and `hypit doctor` then loaded the provider
from it on the next line.

Measured on a global install with an empty machine home, before and after:

  @hyperframes/engine@0.7.101   Ready false, exit 1
  @hyperframes/engine@0.7.101   Ready true,  exit 0
                                Required by   .../packages/provider-hyperframes-local
                                Installation  .../lib/node_modules/@hyperframes/engine

Status now locates the Distribution package that declares the specifier and
asks `locateNodePackage` once, from there — one call covering both places
rather than a second opinion beside the loader, which is how the two came to
disagree. The version is still exact: `distributionPackageDeclaring` matches the
declared range byte for byte, so the requirer is found only at the version asked
for, and the resolved manifest's version is compared again afterwards.

A specifier no Distribution package declares now says so, rather than reporting
a bare `Ready false`, and `install` keeps its own path untouched.

Reading only the machine home remains the answer when there is no Distribution
on disk, because then there is no requirer to resolve from.
2026-09-26 19:51:55 +08:00
kashorin 089c39a012 perf: localize build and render working sets
Preserve forwarded Result values without eager materialization, advance live Builds from disposable indexes, and bound HyperFrames resource, source-frame, and output work.
2026-09-26 06:38:25 +08:00
rpone 78d7436071 fix(oauth): answer the callback preflight for Chrome Private Network Access
The hosted callback page fetches the loopback from a public page, and
Chrome preflights that with OPTIONS under Private Network Access. Without
the CORS and PNA headers the auto-forward breaks once Chrome sends the
preflight. Answer OPTIONS and add the allow-origin header to the GET and
error responses.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-23 18:43:41 +08:00
Sharky Wang 66a35294ad fix(oauth): return sign-in through the hosted callback page (#349)
fix(oauth): return sign-in through the hosted callback page (#349)
2026-09-23 17:09:46 +08:00
Sharky Wang 0aa8038183 Merge pull request #266 from fetw882/fix/cli-programs-prepare-help
fix: list programs prepare in overview help and explain missing Profiles
2026-09-17 17:50:17 +08:00
rpone 0cd38e4e92 test: follow the runtime Profile message to its recovery sentence
runtime-selection.test.ts pinned the earlier wording, which named the missing
Profile without saying how to select one. The assertion now reads the sentence
this command shares with build, pricing, auth and the execution commands, which
is what the test's own name describes.
2026-09-17 17:46:18 +08:00
Flandern bc1d80dbde fix(runtime): stop probe-only Programs without claiming a process 2026-09-17 15:45:39 +08:00
fetw 25ad83f9f9 fix: list programs prepare in overview help and explain missing Profiles
hypit help omitted prepare even though hypit help programs and the
Skill document it. programs/runtime errors named the missing Profile
without the recovery sentence auth already uses.
2026-09-17 13:22:11 +08:00
kashorin e882b0e47f test: respect platform paths and observe process termination without a race 2026-09-17 09:01:10 +08:00
kashorin 216287361d fix(local): prepare resources explicitly and pass authored languages 2026-09-17 06:25:43 +08:00
kashorin 8690e795c5 fix(credentials): separate management from reads and add explicit file storage 2026-09-17 03:30:36 +08:00
kashorin 14c0b2bcb4 fix(oauth): preserve literal Windows URLs and tolerate missing openers 2026-09-17 03:02:28 +08:00
fetw 5653c25377 fix: quote the Windows OAuth authorize URL so cmd keeps query ampersands
cmd /c start splits on `&` unless the URL is a quoted token after an
explicit window title. PKCE authorize URLs always contain `&`, so the
browser never received client_id, redirect_uri or the challenge.

Use ComSpec the way host package install already does, pass
windowsVerbatimArguments, and ignore a missing opener so the printed
URL remains usable.
2026-09-17 01:34:57 +08:00
kashorin 72a62f24d3 test: use native path separators in history output assertion 2026-09-16 22:34:31 +08:00
kashorin 963d7b6c90 fix: resolve project directory aliases at Node entry points 2026-09-16 22:27:43 +08:00
fetw a56576a49e fix: admit in-root paths whose basename starts with ..
path.relative of a workspace file named ..keep.svml is the string
..keep.svml. Treating any relative result that starts with .. as an
escape rejected that file as SOURCE_OUTSIDE_ROOT, and the same
predicate was copied into source discovery, Build Result project
paths, Studio writes and CLI short paths.

Use the repository's existing check: only `..` and `..${sep}` are
parent traversal. A Source still cannot import ../outside.svs.
2026-09-16 17:45:33 +08:00
kashorin 30a4a5d7a7 fix(hypihub): separate canonical model identity from input modes 2026-09-15 23:15:07 +08:00
kashorin e6aa3a23ef fix(runtime): expose preparation progress and preserve CLI context 2026-09-15 22:20:29 +08:00
kashorin b4389a3af7 fix(cli): clarify usage errors and preserve query context 2026-09-15 01:03:49 +08:00
kashorin 300a130593 fix: validate Film inputs and retain verbose execution receipts 2026-09-14 23:29:54 +08:00
kashorin 870fc33bc4 refactor: isolate build execution and complete production workflow 2026-09-14 18:48:45 +08:00
kashorin df129a3c65 feat: preserve Result references and refine Studio workflows
Keep reused media as explicit references, publish Result changes only when needed, and replace Windows files without timed retries. Clarify environment selection and CLI output.

Refine Studio task and media browsing, editable display names, inline media previews, single-row track overlap, semantic ruler pinning, and Companion-owned Ranking selection.
2026-09-11 04:32:05 +08:00
kashorin 2924ace5a7 fix(environment): expose preparation evidence and guide practical service choices 2026-09-10 21:28:02 +08:00
kashorin f1c23248c4 test(cli): keep simulated OAuth request alive until timeout 2026-09-10 04:41:01 +08:00
kashorin 599b2d05d2 fix(pricing): show complete provider-owned rate material
Group requests by endpoint and rate material, summarize explicit no-charge work, and preserve every priced request in JSON. Providers may supply a concise summary alongside their original rate documents; the CLI does not infer prices or walk upstream media dependencies.
2026-09-09 17:26:57 +08:00
kashorin cdd087711d chore(protocol): keep unpublished formats at version 1 2026-09-09 17:26:39 +08:00
kashorin 59b17e777b feat(runtime): expose provider pricing and request support 2026-09-08 17:20:20 +08:00
rpone e346cadf93 fix(cli): exit after the OAuth callback is answered
`server.close()` stops new connections and then waits for the open ones to end.
After the callback is read the browser is usually still holding that connection,
and commonly opens a second one for /favicon.ico, so the wait outlives the token
exchange and `hypit auth login` keeps running with the credential already stored.
A caller that watches for the command to finish sees it hang until its own timeout.

Drop those connections from the completion callback of `response.end`, once the
page has actually been written, and unref the listener so it cannot hold the loop
open on its own. `e3e91d04` made this change in `packages/cli/src/main.ts`; moving
the flow into this module left it behind.

Login now returns in about 7 seconds where it previously ran until the caller
gave up.
2026-09-07 08:05:19 +08:00
kashorin 0dfee16c2e test: respect host paths and media tools 2026-09-07 05:22:43 +08:00
kashorin 7a2c694740 feat(cli): polish the OAuth callback page 2026-09-07 04:36:20 +08:00
kashorin 6c2fae51b0 fix(credentials): rotate OAuth through declared endpoint slots 2026-09-07 04:25:49 +08:00
kashorin f258b9923b feat(authoring): load reusable sources from installed packages 2026-09-07 04:25:49 +08:00
kashorin 1ed40edd6f refactor(runtime): separate endpoint actions from durable operations 2026-09-07 04:25:49 +08:00
kashorin efc8bd56e7 feat(runtime): render selected ranges with weighted capacity
Let HyperFrames render explicit frame intervals with independent browser workers, and make Runtime account for request-dependent resource units across Builds. Preserve external Operations while stopped executions settle so capacity is released only after real work ends.
2026-09-07 04:25:49 +08:00
kashorin f15b1d46f8 refactor(studio): make authoring execution runtime-owned 2026-09-07 04:25:49 +08:00
kashorin 4c6af5860f refactor: remove hidden validation side paths 2026-09-07 04:25:42 +08:00
kashorin 507cd5685e refactor(runtime): keep program lifecycle separate from capacity 2026-09-04 23:01:02 +08:00
kashorin 2bbbe0771c fix(cli): resolve project context before runtime selection 2026-09-04 23:00:27 +08:00
kashorin 1d4124aac7 refactor: make planning and observation boundaries explicit 2026-09-04 21:36:38 +08:00
kashorin 293ccd177d refactor(runtime): model shared limits as capacity, not queues 2026-09-04 21:12:22 +08:00
kashorin 95995555b1 feat(plan): the complete bill of needs before anything is paid for
plan now lists every external request the Build will make, one entry per
request, and runs the plan's Producers that need nothing from outside so
each request's exact constraints exist before submission. Parameters are
read off the request itself (scalars by their own names, prose as a word
count, referenced media counted by kind); no model-specific field table
lives in the CLI. A request whose references are still to be generated
reads the author's request draft upstream and says the references are
pending. Requests with the same shape are grouped and counted, word counts
shown as a range.

Core scheduling becomes incremental: a ready Producer no longer waits for
an unrelated external request that shared its scheduling turn, which is
what let plan-time evaluation reach every request and also stops Builds
serializing cheap steps behind long paid ones.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-04 20:32:49 +08:00
kashorin 0df5e1ff9b feat(runtime): Profile bindings decide contested capabilities; one resolver for plan, invoke and Build
Providers declare everything they can do and never hide a capability:
HypiHub's audio:false flag is gone. When several selected Endpoints offer
the same capability, the Profile's bindings name the one that serves it,
keyed by name@version#capability. plan, creation-time invoke and the Build
resolve through the same EndpointRegistry with the same bindings; doctor
reports a contested capability without a binding (error when a Run demands
it, warning otherwise) and a binding to an Endpoint that does not offer the
capability. Unknown Profile keys are listed together, and the retired
nested-runtime Profile shape gets a migration message.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-04 20:21:59 +08:00
kashorin 5793277bf2 feat(runtime): execute creation-time Needs through the selected Profile
Add the one-shot boundary the creation-time tools were missing: the
Runtime host's `invoke(need, resources)`, implemented by runtime-local as
the same Endpoint activation, capability resolution and credential
resolution a Build uses, with no Build id, Worker, Result or stored state.
Unresolved, ambiguous and asynchronous capabilities are refused with the
exact command that fixes them; the caller owns the ResourceStore.

The reference-video tools now observe and transcribe through it. Gemini
observation seals a real GeminiRequest against the Profile's Gemini
Endpoint instead of picking HypiHub or Vertex from HYPIT_GEMINI_PROVIDER
and reading credential stores itself; the transcript asks the Profile's
whisperx-alignment Endpoint instead of instantiating the local Provider
and probing 127.0.0.1:8765. `--runtime <profile>` names the Profile on
prepare_reference, observe_reference and compare_reconstruction; without
it the project's `hypit runtime use` selection is read, the way `hypit`
reads it. A missing selection, Endpoint or credential leaves the
transcript unavailable with that exact reason and prepares everything
else. The observation retry loop is unchanged but now reports each failed
attempt; its limits wait for real-video measurements.

The Gemini default model comes from @hypit/gemini's declaration rather
than a string, and the Skill's four passages about the environment switch
now describe the Profile binding.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-04 02:09:17 +08:00
kashorin 7a0a325383 feat(plan): name the Provider and price page behind each request
A Provider declares only where it publishes prices: `pricing` on
defineEndpointPackage is either { kind: "page", url } for a paid remote
service or { kind: "local" } for work that runs on this machine. Hypit
never copies or interprets the prices.

The Runtime host gains `providers(capabilities)`, implemented by
runtime-local from the Profile and Endpoint declarations alone; it never
resolves a credential or contacts a service, and reports an unresolved or
ambiguous selection as such. `hypit plan --runtime <profile>` prints a
"Providers and price pages" section so the Agent has exactly one place to
learn which Endpoint serves each external request and where to read its
price; without --runtime it says to pass one.

HypiHub, KIE, Vertex, Xiaomi MiMo and AWS Lambda declare their public
pricing pages; the media, WhisperX, HyperFrames and OpenCV local Providers
declare local. The Provider guide documents the declaration in place of
the removed quote paragraph.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-04 01:18:19 +08:00
kashorin cb0b061e5c feat(runtime): establish honest starter environment 2026-09-03 22:36:29 +08:00