Commit graph

44 commits

Author SHA1 Message Date
Himanshu Dongre
490fda2043 Update REPO_STRUCTURE.md for skill pack, work claims, and current codebase 2026-04-13 00:16:05 +05:30
Himanshu Dongre
8ce495e3d7 Show full claim UUID in CLI and MCP output 2026-04-12 23:56:39 +05:30
Himanshu Dongre
34166e517b Document claim subcommand and MCP tools in cli README 2026-04-12 23:46:56 +05:30
Himanshu Dongre
6f52770b8e Teach work-claim reflex in skill pack v1.5 2026-04-12 23:35:53 +05:30
Himanshu Dongre
011af9bba6 Add work claims for pre-work intent visibility 2026-04-12 23:22:38 +05:30
Himanshu Dongre
17c236ce35 Document shared runtime model for multi-agent local development 2026-04-12 22:24:56 +05:30
Himanshu Dongre
0b6ea2c34f Fix config reload follow-up 2026-04-12 21:59:22 +05:30
Himanshu Dongre
b52b6339a0 Make config startup reliable: honest status, startup warning, defensive dotenv 2026-04-12 21:21:55 +05:30
Himanshu Dongre
7a2443c4bf Add clean-start and clean-finish rules to skill pack v1.3 2026-04-12 21:02:37 +05:30
Himanshu Dongre
437778b584 Clarify Codex quick start path 2026-04-12 20:36:13 +05:30
Himanshu Dongre
cd200ea528 Add quick start for coding agents to README 2026-04-12 20:15:42 +05:30
Himanshu Dongre
6aab2165d9 Update skill pack to v1.2 with repo reconciliation rule 2026-04-12 19:55:45 +05:30
Himanshu Dongre
fa62e2eff3 Load .env via python-dotenv so extractor gets API keys reliably 2026-04-12 13:11:57 +05:30
Himanshu Dongre
bea192d25d Update Smriti skill pack for cross-agent continuation 2026-04-12 11:50:39 +05:30
Himanshu Dongre
3b8b86ce0d Add lineage integration test for author_agent 2026-04-12 11:39:19 +05:30
Himanshu Dongre
e976cd7394 Add Smriti skill pack for Codex 2026-04-12 10:52:32 +05:30
Himanshu Dongre
28dbdedae9 Show author_agent in LineagePage checkpoint cards 2026-04-12 10:48:15 +05:30
Himanshu Dongre
299382b6bf Document skill pack and multi-branch state as the V4 surfaces
cli/README.md:
- Add an "Installing the Smriti skill pack" subsection between the MCP
  server section and the Commands reference. Walks through the target
  list (claude-code, codex), the CLI install flow, the MCP-tool flow
  (read the returned markdown, write via host file tools), and the
  verification criterion ("agent calls state unprompted, never writes
  HANDOFF.md").
- Update the MCP tools table to 13 entries (add smriti_install_skill).
- Update the Commands reference to include smriti skills list/show/
  install and the new --main-only flag on smriti state.
- Update the "Using Smriti from a coding agent" walkthrough to note
  multi-branch state as the default, with caps and the --main-only
  escape hatch.

README.md (root):
- Expand the agent-facing surfaces section to list four surfaces, not
  three: chat UI, CLI, MCP server, agent skill pack. Explain what the
  skill pack does in one paragraph.
- Update the "Where this is going" outlook to acknowledge that the
  transport gap is closed, the fluency gap is what the skill pack
  addresses, and the open questions are now shape questions.

DECISIONS.md:
- Add "Why skill packs are a first-class surface, not documentation" —
  records the reasoning for shipping versioned instruction files into
  agent host project directories rather than a docs site, and explains
  why Section 5 ("When NOT to checkpoint") gets equal weight to "When
  to checkpoint."
- Add "Why smriti state is multi-branch by default" — records why the
  default was flipped, what the hard caps are, that divergence
  detection reuses the compare normalization, and that --main-only /
  main_only=True preserves the legacy path for scripts.

ARCHITECTURE.md:
- Split the agent-facing backend section into runtime surfaces (CLI,
  MCP, chat UI) and the onboarding surface (skill pack) to make the
  distinction between how agents call Smriti and how they learn to
  call Smriti explicit.
- Expand the CLI + MCP surface descriptions to reference the new V4
  state endpoint and the new smriti_install_skill MCP tool (13 tools
  now).
- Add a "Multi-branch state" subsection documenting the new endpoint,
  the hard caps, the reuse of _diff_lists from lineage, and the
  backward-compat story via --main-only / main_only=True.
- Update the API versioning table to note /api/v4/chat/spaces/{id}/state
  as the agent-facing default alongside /head.
2026-04-12 02:14:35 +05:30
Himanshu Dongre
7586e8ec6a Add skills CLI subcommand and smriti_install_skill MCP tool
CLI:
  smriti skills list                         — enumerate targets + version
  smriti skills show <target>                — print rendered content to stdout
  smriti skills install <target>             — write to target's default destination
  smriti skills install <target> --dry-run   — preview without writing
  smriti skills install <target> --force     — overwrite same-or-newer version
  smriti skills install <target> --destination PATH   — override default path

The skills group does not hit the backend; rendering is a local
package-data lookup. Version-aware refusal is already implemented in
the renderer — install prints a clear "Skipped: already has version X"
message and exits non-zero without --force.

MCP:
  smriti_install_skill(target: str) -> str

Returns the rendered skill pack wrapped in a fenced markdown block with
the suggested destination path at the top. Unlike the CLI, the MCP
tool does NOT write any files — the MCP server runs in the host's
arbitrary working directory, so the agent is expected to read the
suggested destination and write the file using its host's own file
tools (Edit/Write/Bash). This keeps the MCP server read-only from the
host filesystem's perspective.

Thirteen tools total now registered on the FastMCP instance.
2026-04-12 02:10:16 +05:30
Himanshu Dongre
ec0139f707 Add Smriti agent skill pack source and renderer
The skill pack is an instruction file installed into an agent host's
project directory so Smriti's workflow lives in the agent's system
context instead of documentation nobody reads. A single versioned
template.md renders for both Claude Code (MCP-primary) and Codex
(CLI-primary) via a pure-function substituter, keeping content in
sync mechanically across targets.

template.md contains 15 sections. The load-bearing one is Section 5,
When NOT to checkpoint, with equal weight to Section 4. Agents are
told explicitly not to checkpoint after every small step, not to
produce end-of-session blobs, not to treat commits as a save button,
not to stack commits on inconsistent state, not to restate existing
state, and not to checkpoint just because the user asked when there
is no real inflection point. A frequency target (2-4 checkpoints per
4-hour session) and a three-question signal test give agents concrete
criteria for every call.

Other sections cover the read-state-first reflex, when to fork, when
to review, when to compare, when to restore, drift detection,
explicit anti-patterns (HANDOFF.md, silent state reads, inconsistent
author_agent, /chat/send), and the phrases the agent should say out
loud so the human watching has an audit trail.

Renderer API (all pure functions): load_template, get_version, render,
install. install is version-aware: refuses to overwrite a destination
whose installed version is >= the template version unless force=True.
Dry-run mode returns the rendered content without writing.

Content-integrity tests parametrized over both targets assert that
every anti-pattern rule, the signal test, the frequency target, and
the drift-detection guidance appear in the rendered output. If a
future template edit drops any of them, tests fail loudly.

22 skill pack tests, all green.
2026-04-12 02:07:47 +05:30
Himanshu Dongre
491c7316b1 Surface multi-branch state in CLI and MCP by default
smriti state and smriti_state now default to the /state endpoint from
the previous commit, which returns main HEAD plus active non-main
branches plus a lightweight divergence signal. The main continuation
brief still renders first and is unchanged; the two new sections are
appended after it and elided cleanly when there is no fork activity.

Output shape for a single-agent project is byte-identical to before,
so existing users see no change. Projects with multiple agents on
different branches now see one line per active branch in an Active
branches section, and if any branch disagrees with main on decisions
a Divergence signal section names the specific conflicting decisions
and points at smriti compare for the full diff.

Hard caps from the endpoint (5 branches, 2 divergent pairs, 3
decisions per side) keep the aggregate output digestible no matter
how busy the project is.

--main-only (CLI) / main_only=True (MCP) falls back to the legacy
two-call get_head + get_commit path for scripts that parsed the old
shape.

format_state_brief gains an optional space_state kwarg; existing
callers passing only positional args are unaffected.
2026-04-12 02:02:03 +05:30
Himanshu Dongre
7eabdc820e Add multi-branch space state endpoint
GET /api/v4/chat/spaces/{id}/state is the richer sibling of /head. It
returns main HEAD plus up to 5 active non-main branches plus a
lightweight divergence signal when any active branch disagrees with
main on decisions. Hard caps (5 branches, 2 divergent pairs, 3
decisions per side per pair) keep the aggregate response digestible.

Divergence detection reuses lineage._diff_lists so matching stays
consistent with smriti compare — decisions differing only in case or
punctuation normalize equal and do not trigger a false divergence
signal.

The query helper uses a Python-side per-branch dedupe rather than
Postgres DISTINCT ON so integration tests can run on sqlite without
dialect-specific workarounds. The non-main commit space for any real
project is small, so the cost is negligible.

No schema changes. No migrations. No behavior change for existing
callers of /head.
2026-04-12 01:58:03 +05:30
Himanshu Dongre
e8711ee48c Update docs to reflect CLI + MCP transport parity
Five rounds of dogfood testing closed the basic agent handoff loop and MCP
shipped as the second transport. Update the docs to match:

- cli/README.md: replace the brief "Typical agent workflow" + "Multi-branch
  workflow" sections with a transport-agnostic "Using Smriti from a coding
  agent" walkthrough. CLI commands and their MCP tool equivalents are shown
  side by side. Covers orient → work → checkpoint → hand off, the extractor
  path (no hand-written JSON anymore), and the branching/compare/restore
  flow.
- README.md (root): list MCP as a third surface alongside the chat UI and
  CLI. Update the "Where this is going" outlook to acknowledge that the
  handoff loop is proven and the open questions are now shape questions,
  not transport questions.
- ARCHITECTURE.md: add MCP server as a third entry in the agent-facing
  backend section, with the deliberate differences from the CLI (no cwd
  auto-capture, no per-tool confirmation) spelled out.
- DECISIONS.md: keep the original "why CLI first, not MCP" entry as
  historical context and add a "Shipping MCP as the second transport"
  entry recording the design decisions made at ship time (same package,
  FastMCP, stdio only, 12 tools, extract-only create_checkpoint, empty
  project_root default, MagicMock unit tests).
2026-04-12 01:14:49 +05:30
Himanshu Dongre
332929374a Polish MCP server: full UUIDs, quieter logs, docs notes
Round 5 dogfood surfaced three small friction items:

- smriti_list_checkpoints only rendered short hashes, forcing agents to
  make a second round trip to get the UUID they needed for fork/compare/
  restore. format_commit_list now appends the full UUID in parentheses
  when c["id"] is populated; legacy callers without ids still render a
  clean line. CLI output benefits equally since formatters are shared.
- The mcp SDK logs "Processing request of type ..." at INFO on every
  tool call, cluttering host log panels. smriti-mcp main() now defaults
  the mcp logger to WARNING. Set SMRITI_MCP_LOG_LEVEL=INFO (or DEBUG)
  in the host's env block to re-enable verbose logging when debugging.
- Add README notes acknowledging that the mcp SDK negotiates the
  protocol version on its own during initialize, and documenting the
  new log-level env var.
2026-04-12 01:09:54 +05:30
Himanshu Dongre
2258231c30 Add MCP server wrapping all CLI commands as 12 tools
Round 4 validated that the Smriti CLI surface is complete. This is the
next transport: an MCP stdio server that exposes the same operations as
tools inside MCP-aware hosts (Claude Code, Cursor, Windsurf) so agents
can read and write reasoning state natively in their session instead of
shelling out to the `smriti` binary.

The server lives inside the existing CLI package as a sibling to
client.py and main.py. One `pip install -e ./cli` installs both the
`smriti` and `smriti-mcp` console scripts. Architecture is a thin shim:
each tool builds a SmritiClient, calls 1-2 client methods, pipes the
result through an existing formatter, and returns a string. FastMCP
auto-wraps the string into TextContent. Errors raise SmritiToolError
(wrapping SmritiError with HTTP status + structured detail); FastMCP
converts raised exceptions into MCP error responses.

Zero reimplementation of API logic, zero duplicated formatting, zero
changes to client.py, formatters.py, main.py, or the backend.

Twelve tools, 1:1 with the CLI verbs:

  smriti_list_spaces        smriti_state
  smriti_create_space       smriti_list_checkpoints
  smriti_delete_space       smriti_show_checkpoint
  smriti_create_checkpoint  smriti_review_checkpoint
  smriti_delete_checkpoint  smriti_restore
  smriti_fork               smriti_compare

Two deliberate differences from the CLI:

  - No `-y` confirmation flag on destructive tools. The MCP host's
    tool-approval UI is the gate.
  - smriti_create_checkpoint uses the extract path only (no
    --from-json mode) and does NOT auto-capture cwd as project_root.
    MCP servers run in the host's arbitrary working directory, so
    cwd would plant garbage paths. Callers pass project_root
    explicitly when they want it populated.

Testing: 33 unit tests across all 12 tools using a
MagicMock(spec=SmritiClient) fixture in tests/conftest.py. Each tool
has at least one happy path and one error path; the complex ones
(smriti_state, smriti_create_checkpoint, smriti_delete_checkpoint)
have extra tests for their branches (no-checkpoints short-circuit,
dry-run, existing-session, 409-with-dependents formatting,
409-with-non-dict-fallback, empty-content pre-check).

End-to-end stdio protocol smoke verified independently: the
`smriti-mcp` binary responds to `initialize` with protocol version
2025-03-26 and returns all 12 tools on `tools/list`. Ready for
`mcp dev smriti_cli.mcp_server:mcp` Inspector UI exploration or
direct Claude Code connection.

cli/README.md gets a new MCP server section with installation,
example Claude Code config, tool list, and notes on the project_root
and confirmation-gate differences from the CLI.
2026-04-12 00:54:40 +05:30
Himanshu Dongre
e5db6d8116 Add mcp dependency and pytest harness skeleton
First two steps of V3 Build 2 (the MCP server transport):

  - Pin `mcp>=1.27.0,<2.0.0` in cli/pyproject.toml. FastMCP has been
    the high-level API across the entire 1.x line and is what the
    server will use for tool registration. Verified importable as
    `from mcp.server.fastmcp import FastMCP`.
  - Add `[project.optional-dependencies].dev` with pytest>=7.0 and
    `[tool.pytest.ini_options]` so `pip install -e "./cli[dev]"`
    gets the full dev loop. The cli package previously had no tests.
  - Create cli/tests/ with __init__.py, an empty conftest.py (soon
    to host the shared mock_client fixture), and a smoke test that
    just confirms `smriti_cli` imports. Gives us a working `pytest`
    command from the first commit.

The `smriti-mcp` entry point + actual MCP server code land in the
next commit alongside mcp_server.py so every commit leaves the
package in an installable state.
2026-04-12 00:46:34 +05:30
Himanshu Dongre
6028dacff1 Extract checkpoint fields from freeform markdown via LLM
Round 3 of the dogfood confirmed that every multi-branch CLI command
works end-to-end, but the single biggest remaining friction is still
checkpoint payload construction. Each agent hands off a ~15-18 KB
markdown document; turning that into the Smriti schema (decisions,
assumptions, tasks, open_questions, entities, artifacts) is three
minutes of hand-written JSON per checkpoint and adds no product value.

This build adds an LLM-powered extractor that collapses that work into
one pipe command:

  cat /tmp/r3_agent_a_output.md | smriti checkpoint create my-project \
      --extract --author-agent codex-A

The CLI reads stdin as freeform markdown, calls the new
POST /api/v5/checkpoint/extract endpoint, maps the returned fields
into a commit payload, and writes the checkpoint. --dry-run prints the
extracted payload without committing so users can review first.
--extract and --from-json are mutually exclusive.

Backend architecture mirrors the existing review endpoint: stateless
LLM call (no session or commit ID required), uses the same background
intelligence provider (cfg.background.provider / cfg.background.model)
as draft and review, same JSON-mode prompt shape, same 502-on-parse-
error pattern. The extractor endpoint differs in one small way: it
passes allow_mock=True to get_adapter so unconfigured test envs fall
back to MockAdapter without raising 500. Production envs always have
a real provider configured and never hit this fallback.

The extractor is the first LLM-backed endpoint that gets tested
against a real mock response. To make that work, MockAdapter.send now
detects response_format={"type": "json_object"} in kwargs and returns
a canned JSON blob covering every field any current Smriti endpoint
looks for (title, objective, summary, decisions, assumptions, tasks,
open_questions, entities, artifacts, issues, suggestions). Existing
chat.send text-mode tests are unaffected because they don't pass
response_format. This also unblocks future tests for draft and review.

Manual verification against a real OpenAI provider: piped a realistic
23-line handoff markdown with 4 decisions, 3 assumptions, 3 tasks,
2 open questions, and a python code block. The extractor returned
exactly those items in the right fields (4/3/3/2/1) and produced a
valid checkpoint with all fields populated. Round 4's load-bearing
claim — zero hand-written JSON per checkpoint — is now achievable.

153/153 backend tests pass (149 pre-existing + 4 new extract tests).
2026-04-11 19:15:03 +05:30
Himanshu Dongre
837981c1f2 Flip smriti restore default to full artifacts, add --preview
V2 Build 3 flipped smriti state to show full artifact content by
default and added --preview for the old truncated behaviour. smriti
restore was left on the old defaults, so the two commands that render
the same kind of continuation brief behaved inconsistently — the
round 3 dogfood caught this when `smriti restore ckpt --preview`
errored with `unrecognized arguments: --preview`.

This aligns smriti restore with smriti state:
  - default shows full artifacts
  - --preview truncates to the short preview format
  - --full-artifacts kept as a no-op alias so existing scripts still work
2026-04-11 18:56:02 +05:30
Himanshu Dongre
f2c5c08942 Record project_root and author_agent on checkpoints
Cross-agent handoffs need to know two things the old schema did not
carry: where the project lives on disk (so the receiving agent opens
the right repo), and which agent wrote the checkpoint (so branches
can be attributed when two agents have forked the same tree). Round 1
of the dogfood lost the first one — Agent A designed files at one
path and Agent B wrote them at a different path because nothing in
the schema carried "where we are". Round 2 worked around it by putting
the path in the prompt, but the schema still had no slot for it.

This build adds a `project_root` column to the commits table (nullable
TEXT, no backfill), plumbs it through the V2 commit-create path and
V4 chat-commit path, and has `smriti checkpoint create` auto-capture
the current working directory by default. `--project-root /path`
overrides and `--no-project-root` opts out.

`author_agent` already existed on the model but the V4 chat-commit
endpoint hardcoded it to the session's active provider (e.g.
"anthropic"), so it was a provider name, not an agent identifier.
This build makes the request's `author_agent` field win when provided
and falls back to the session provider only when it isn't. CLI adds
`--author-agent <name>` so agents can tag themselves cleanly as
"claude-code" or "codex-local" rather than the underlying provider.

Both fields surface in `smriti state`, `smriti checkpoint show`, and
`smriti restore` meta lines — `by <agent>` and `at <path>` (with $HOME
tilde-expanded for readability). The meta line elides each segment
cleanly when the field is null, so old checkpoints without either
value still render correctly.

While I was here, flipped `smriti state` to show full artifacts by
default. `--preview` is the new way to get truncated previews.
`--full-artifacts` is kept as a no-op alias so existing scripts that
explicitly passed it still work. The CLI is agent-first and agents
want the full content for handoff; humans wanting a quick glance can
pass `--preview`.

149/149 backend tests pass (147 pre-existing + 2 new: round-trip of
the two fields and the author_agent fallback regression).
2026-04-11 18:08:13 +05:30
Himanshu Dongre
2a6614bd80 Add fork, compare, restore CLI commands and fix compare correctness
Round 2 of the agent handoff dogfood showed that every multi-branch
operation required reaching past the CLI into curl: fork had no CLI
command, `smriti checkpoint create` always spawned a fresh session with
no way to attach to a forked one, and the compare endpoint returned
useless output (common_ancestor_commit_id was missing from the response,
and shared-set matching was exact-string so two agents phrasing the
same commitment differently showed zero overlap).

This ships the full CLI surface for multi-branch workflows plus the
backend fixes that make compare actually useful:

  smriti fork <checkpoint-id> [--branch <name>]
  smriti restore <checkpoint-id>
  smriti compare <checkpoint-a> <checkpoint-b>
  smriti checkpoint create <space> --session <session-id>

The compare endpoint now walks parent chains to compute a lowest
common ancestor (bounded to 1000 steps with a cycle guard) and returns
it on CheckpointDiff as an optional uuid. Shared-set matching uses a
lightweight lowercase + punctuation-strip + whitespace-collapse
normalization for keying, but returns the original A-side strings so
the output stays readable. Four new compare tests cover direct and
two-step LCA, null LCA for unrelated checkpoints, and normalized
shared-set matching. Existing compare tests still pass unchanged
because their data ("Use Redis" vs "Use Postgres") is distinct at any
sensible normalization level.

`smriti restore <checkpoint>` is a pure read — it renders any
checkpoint as a continuation brief matching `smriti state <space>`
shape. `smriti fork` derives the space from the checkpoint so the
user does not have to pass it separately. `--session` on checkpoint
create is purely additive: when absent, the existing auto-session
behavior is unchanged.

147/147 backend tests pass (143 pre-existing + 4 new).
2026-04-11 17:50:03 +05:30
Himanshu Dongre
73c71b4c9d Add delete endpoints for spaces, checkpoints, and sessions
Two rounds of agent-handoff dogfood testing surfaced that Smriti had no
way to delete spaces, sessions, or checkpoints via any surface. This
adds DELETE endpoints to the V2/V4 API, new CLI commands, and UI
affordances on the workspace overview and chat history panel so the
daily cleanup path does not require opening a Python shell.

Checkpoint delete refuses with 409 Conflict when child commits or
forked sessions reference the target, because silently orphaning them
would cause walk_ancestors to collapse lineage and forked sessions to
lose isolation. The refusal is escaped via ?cascade=true on the API,
--cascade on the CLI, and a two-step confirm with a dependents list
plus checkbox in the UI modal.

Space delete relies on the existing DB-level cascade chain from the
earlier commit/session/turn migrations — no new Alembic migration is
needed. Session delete cascades turn events but preserves commits
authored by the session, since commits are space-owned artifacts.

14 integration tests cover cascade correctness, 409 refusal, the
cascade escape hatch, cross-user 404s, subtree ordering, and
idempotency. Existing tests pass unchanged (143/143).
2026-04-11 17:25:36 +05:30
Himanshu Dongre
36591d9375 Update REPO_STRUCTURE and API docs for the CLI
REPO_STRUCTURE now lists the cli/ directory and refreshes the API
version map to reflect that V2 is current and serves the CLI's read
path (with the full checkpoint schema). docs/API.md replaces the
"do not build against V2" guidance with a clear description of which
prefix is used for what.
2026-04-11 13:18:49 +05:30
Himanshu Dongre
89b6df16cf Add CLI for agent and programmatic access
Introduce a thin Python CLI that wraps the backend REST API. Seven
commands: space list, space create, state, checkpoint create,
checkpoint show, checkpoint list, checkpoint review. Reads piped
JSON on stdin for checkpoint create, prints a continuation-oriented
markdown brief for state. Supports --json on every command for
structured output.

Fixes a V2 schema drift where the commit response omitted
assumptions and artifacts, so the CLI can read full checkpoints
via the cleaner V2 single-resource endpoints. Updates README,
ARCHITECTURE, and DECISIONS to frame Smriti as a reasoning-state
backend with the chat UI and CLI as two clients of the same core.
2026-04-11 11:10:01 +05:30
Himanshu Dongre
9408fae00c Add workspace overview landing page
Replace the auto-session landing behavior with a resume-focused
overview at /. When returning after a break, the root page now
shows the most recent checkpointed session as a Resume card with
its current objective and last checkpoint summary visible, plus
cards for other recent spaces. New sessions explicitly go through
/sessions/new instead of being created on bare /.
2026-04-10 23:30:45 +05:30
Himanshu Dongre
1eea01d949 Compose drift, review, and restore into one flow
Surface a soft drift hint in the chat header when many turns have
passed since the last checkpoint (turn-count based, not semantic).
Add a Restore action to the checkpoint detail panel as a peer to
Review, so users can act on a checkpoint without leaving the
inspection flow. When review surfaces issues, show an inline
Continue from this checkpoint button so recovery is one click away.
2026-04-10 17:54:20 +05:30
Himanshu Dongre
744b3ee745 Align docs with current product capabilities
Update README with restore UX, checkpoint review, assumptions,
and artifacts. Add when-to-use guidance. Sharpen problem statement
around drift and recovery. Update ARCHITECTURE with new checkpoint
fields and restore terminology. Add three new decisions to
DECISIONS.md. Document review endpoint and new fields in API docs.
2026-04-04 22:02:58 +05:30
Himanshu Dongre
d01a180975 Add artifact-aware checkpoints
Checkpoints can now hold attached artifacts — text content captured
from chat messages or added manually. Artifacts are included in
prompt context when a checkpoint is active, grounding reasoning in
actual content rather than just summaries. Add capture button on
messages, artifact management in checkpoint modal, and collapsible
artifact display in checkpoint detail.
2026-04-04 21:35:41 +05:30
Himanshu Dongre
2f155e8dcc Add checkpoint review and assumptions field
Separate assumptions from decisions as a first-class checkpoint
field. Add review endpoint that surfaces reasoning consistency
issues: contradictions, hidden assumptions, resolved questions,
and unused entities. Extend draft extraction, prompt context,
and compare diff to include assumptions.
2026-04-04 21:07:41 +05:30
Himanshu Dongre
97b7845cb5 Improve checkpoint restore UX with visual state transitions
Rename mount/unmount flow to restore/exit restore. Add visual
restore boundary divider in chat timeline. Dim pre-restore turns
to make isolation visually obvious. Show contextual empty state
and one-time hint for restored context.
2026-04-04 20:33:30 +05:30
Himanshu Dongre
b16f81e20a Updated ReadMe 2026-03-23 01:41:06 +05:30
Himanshu Dongre
53eb056255 Refine README: positioning, demo UX, and clarity improvements 2026-03-22 15:25:02 +05:30
Himanshu Dongre
fb8dfd9ef1 Added Screenshot of Checkpoint diff from tool 2026-03-22 15:13:58 +05:30
Himanshu Dongre
125b19e51d Refine README for public launch clarity 2026-03-22 14:16:37 +05:30
Himanshu Dongre
befea97bf6 Initial public release 2026-03-22 13:48:50 +05:30