Skip to content

Releases: Amphidrom/nlght-ai

nlght-ai v0.1.2

Choose a tag to compare

@r4id4h r4id4h released this 20 Jul 08:31

Change notes — v0.1.2

Released: 2026-07-20

  • docs: place Demo Showcase in the Getting Started hierarchy, remove the
    duplicate page heading, and align all links with its slug.
    (working/fix-showcase-page-consistency)
  • docs: move the executable demo gallery to a dedicated Showcase page so
    Recipes contains only reusable AI patterns. (working/separate-recipes-from-showcase)
  • docs: reframe Recipes as concise AI patterns and align the demo documentation
    with the six-case executable showcase. (working/refresh-recipes-and-demo-docs)
  • ci: tests.yml now skips when the pushed commit carries a v* release tag, so
    a release runs only release.yml (which already enforces the full gate) instead
    of both workflows in parallel on the same commit. (working/ci-skip-tests-on-release, ADR-0025)

nlght-ai v0.1.1

Choose a tag to compare

@r4id4h r4id4h released this 19 Jul 16:44

Change notes — v0.1.1

Released: 2026-07-19

  • release: process the final public-mirror exclude entry even when the file
    has no trailing newline, preventing paths such as scripts/release from
    leaking into the public snapshot. (slice:
    working/public-mirror-exclude-final-line)

  • roadmap: document the planned move from blocking tool loops to asynchronous
    orchestration where reasoning can continue around in-flight calls, suspend or
    wait when necessary, and supervise subprocesses up to complete child
    workflows. (slice: working/parallel-tool-orchestration-roadmap)

  • agent skill: expand the nlght project skill with code-backed public APIs,
    complete platform/provider options, workflow/tool/playbook/session/protocol
    patterns, diagnostics, deployment, and E2E coverage guidance; correct the
    mutable step context, signal, and tool-event examples. (slice:
    working/nlght-skill-reference)

  • fix(coverage): count regular cloud provider implementations now that their
    e2e suite contributes to CI coverage; exclude instrumented *_debug.py
    duplicates and retain the ollama_local.py exclusion because its daemon-
    backed e2e suite intentionally remains local-only. (slice:
    working/provider-coverage)

  • fix(ci): make https://api.openai.com/v1 the regular/debug OpenAI provider
    default so an explicitly empty CI OPENAI_BASE_URL cannot produce relative
    request URLs; retain non-empty Azure/proxy overrides. Run architecture tests
    without starting an empty coverage process and generate the combined report
    and XML in a dedicated step after unit, integration, and cloud e2e coverage
    have been combined. (slice: working/openai-default-endpoint; ADR-0030)

  • docs(skill): validate the nlght project skill metadata and synchronize its
    model-provider guidance with the current provider kinds, defaults, debug
    clients, continuation requirements, and shared e2e conventions. (slice:
    working/update-nlght-skill)

  • fix(model): the non-streaming Ollama tool loop (call() with a catalog) never
    sent the tool schemas — both ollama_local and ollama_cloud built the
    /v1/chat/completions body as {model, messages, stream:False} with no
    tools, so the model was never told the tools existed and returned no tool
    call (streaming already sent them). Proven by an evidence log
    (tools_in_request=None); fixed by deriving OpenAI-format tools from the
    catalog and adding them to the body, mirroring stream(). Verified: the local
    Ollama e2e suite now passes 5/5. (slice: working/model-provider-e2e)

  • chore(model): preserve the fully instrumented Anthropic, OpenAI, Google,
    Ollama local/cloud clients and shared Ollama HTTP transport as *_debug
    modules, with both Ollama debug clients isolated onto _ollama_http_debug.
    Regular production clients no longer emit diagnostic INFO/DEBUG request,
    response, token, chunk, or tool-loop traces; operational warnings and all
    provider bug fixes remain unchanged. (slice: working/model-provider-e2e)

  • fix(model): Anthropic's streaming tool loop never invoked tools.
    AsyncMessageStream.get_final_message() is async but was called without
    await, so final was a coroutine, the except swallowed the resulting
    AttributeError, and tool_use blocks were never surfaced as tool_call events.
    Non-streaming worked; both streaming tool paths (native catalog loop and the
    step-driven stream() loop) silently produced no call. Added the await; a
    regression test asserts a tool_use block in the final message reaches the
    caller as a tool_call event. (slice: working/model-provider-e2e)

  • fix(model): Google/Gemini 3.x tool loops failed with 400 INVALID_ARGUMENT
    ("Function call is missing a thought_signature"). Gemini 3.x returns a
    thought_signature on function_call parts and requires it echoed back on the
    continuation; the client dropped it by rebuilding the part. The native loops
    (call() and stream() with a catalog) now re-append the model's own turn /
    function_call Parts verbatim instead of rebuilding them, preserving the
    signature. The step-driven path carries it (base64) through the canonical
    tool-turn (append_ollama_native_tool_turn) and _to_google_contents decodes
    it back onto the Google part; other providers ignore the extra key. Unit tests
    cover the canonical round-trip; confirmed against the live Gemini API (all
    Google tool-loop e2e scenarios pass). (slice: working/model-provider-e2e)

  • test(model-clients): restructure the e2e model-client suite so every client
    is exercised by one shared scenario set (tests/model_client_suite.py:
    non-stream call, streaming tokens, native tool loop in call() and stream(),
    and the step-driven append_tool_turn() loop). Cloud clients (Anthropic,
    OpenAI, Google, Ollama Cloud) stay in tests/e2e; the local Ollama client
    moves to a new tests/local_e2e package that runs the same suite and is
    deselected by default (-m "not local_e2e") — it needs a live daemon and
    never runs in CI. Dropped the misnamed "ollama proxy" tests and the
    local-Ollama e2e conftest. Env naming is now uniform and prefix-free
    (<PROVIDER>_API_KEY + <PROVIDER>_MODEL, plus OPENAI_BASE_URL); the old
    NLGHT_E2E_* model vars and the …_OLLAMA_CLOUD_URL/KEY/MODEL trio are gone.
    Ollama Cloud gates on OLLAMA_API_KEY alone (default model gpt-oss:20b, a
    free-tier/no-subscription model), needs no URL. Also fixed a real suite bug: the backend fixture was
    module-scoped, so async SDK clients outlived their event loop and the Google
    client raised "Event loop is closed" from the second test on — now
    function-scoped, one client per test. README gains an e2e-scope note under the
    badge block: the local Ollama suite is intentionally not run in CI (no daemon)
    and is verified locally. (slice: working/model-provider-e2e)

  • feat(model): Ollama Cloud base_url defaults to https://ollama.com
    (overridable) so a cloud provider needs only an API key. OllamaCloudClient
    gains the default; CompositionService picks the endpoint per kind
    (ollama-local → localhost, cloud kinds → ollama.com), any configured
    base_url still wins. (slice: working/model-provider-e2e; ADR-0029)

  • fix(model): Google's gemini-2.0-flash was decommissioned by the
    provider (HTTP 404, "no longer available"), breaking all 5 Google e2e
    scenarios. Replaced the hardcoded default everywhere it appeared
    (production wiring in composition_service.py, e2e test default, both CI
    workflow env fallbacks, both doc examples) with gemini-3.5-flash.
    Separately, GoogleModelClient.list_models() previously only ever
    returned the static _CONTEXT_WINDOWS table — it now queries the live
    Google Generative AI API first (client.aio.models.list()), falling back
    to the static table only on error, matching the pattern
    OpenAICloudModelClient.list_models() already used. Token-budget
    resolution is unchanged (still the static prefix-matched table — Google
    exposes no reliable context-window metadata endpoint). New/updated unit
    tests mirror OpenAI's existing live/fallback test pair.
    (slice: working/google-e2e-live-model-standards)

  • fix(badge): replace the live img.shields.io/pypi/v/nlght-ai PyPI badge
    with a self-generated static pypi.svg, rendered the same way as
    tests.svg/coverage.svg (anybadge). Owned by a third lifecycle:
    prepare_release.py regenerates it from the version being bumped, at
    bump-before-tag time (ADR-0025), so it travels with the normal pre-tag
    commit — no live PyPI query, no new release-workflow step (the tagged
    commit already carries the right file via git archive). Initial value on
    main: v0.0.1. release_badges.py gained generate_pypi() and a pypi
    CLI subcommand; pypi.svg joined the BADGES tuple that drives both the
    repo's own README and the tag-pinned public/PyPI-description markdown.
    (slice: working/pypi-self-generated-badge, ADR-0028)

  • docs(memory): explain the full store-to-prompt pipeline, including Weighted
    Sigmoid as the default relevance strategy, Linear and Multiplicative
    alternatives, effective thresholds and limits, cache semantics, prompt
    disclosure controls, and the boundary between Python wiring, YAML, and fixed
    internals. (slice: working/session-doc-illustrations)

  • docs(models): document context-budget resolution and unknown-model fallbacks
    for every provider; distinguish local Ollama /api/show discovery from
    static cloud tables, and correct the shared partition chart to the actual
    Store/Prompt/Response/Safety 40/20/20/20 split.
    (slice: working/model-provider-budget-docs)

  • docs(access): visualize rule-based access-policy evaluation, including the
    default-open no-rule path, priority/tie ordering, and fail-closed allowlist
    semantics when subject rules exist. (slice: working/echarts-visualizations)

  • docs(concepts,hero): keep Concepts graph nodes and legends inside their
    chart bounds across desktop and narrow layouts, and add a responsive index
    hero topology that connects an app through nlght-ai to its four core user
    benefits: explicit workflows, persistent memory, any model, and self-hosting.
    (slice: working/echarts-visualizations)

  • docs(diagrams): migrate every fixed rectangular node-link chart to the
    responsive rectangle-edge integration, preserving native labels, tooltips,
    emphasis, and edge semantics while making arrow endpoints exact; improve
    Signals Sankey labels and the final responsive hero composition.
    (slice: working/rect-graph-doc-migration)

  • docs(hero): add three temporary hero-visual preview pages
    (/hero-variant-1 platform map with request particles, /hero-variant-2
    draggable concept constellation, /hero-variant-3 timeline pulse) for the
    index-page hero decision; the chosen one moves into docs/index.mdx and
    the previews get deleted. (slice: working/echarts-visualizations)

  • docs(concepts): add in-chart legends to all five concept diagrams (g...

Read more