Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
06113a3
Refresh ambient palm-shadow source, slow playback, enlarge portrait crop
omarehamid Oct 13, 2026
10c59c6
fix(frontend): revert NIGHT_DEPTH to 0.517, correct crush-limit comment
omarehamid Oct 15, 2026
ef6b972
[Spec 301][Phase: transfer] feat: contribute standalone Faithful Answ…
timeleft-- Oct 21, 2026
a10e4a5
[Spec 301][Phase: review] docs: record destination host validation
timeleft-- Oct 21, 2026
7ce6402
[Spec 301][Phase: implement] fix: simplify footer and link feedback
timeleft-- Oct 21, 2026
4a2f3f2
[Spec 301] Document the Faithful Answers app walkthrough
timeleft-- Oct 21, 2026
6c62b31
[Spec 301] Serve stateless MCP through Hono with a startup-prepared view
timeleft-- Oct 21, 2026
a89eef0
[Spec 301] Remove obsolete RPC logging parser
timeleft-- Oct 21, 2026
e856ad8
[Spec 301] Use published SAGA shared SDK fixes
timeleft-- Oct 21, 2026
7b3cb67
[Spec 301] Refresh app architecture walkthrough
timeleft-- Oct 21, 2026
146b91d
[Spec 301] Release request timers and close in-flight HTTP requests
timeleft-- Oct 21, 2026
15faf2d
[Spec 301] Explain SSE, JSON and in-flight shutdown in walkthrough
timeleft-- Oct 21, 2026
93893db
[Spec 301] Add hosted lifecycle walkthrough for Alexa ChatGPT and Claude
timeleft-- Oct 21, 2026
5acba0e
[Spec 301] Make walkthrough navigation visibly interactive
timeleft-- Oct 21, 2026
abd256d
[Spec 301] Move Faithful Answers into the apps workspace
timeleft-- Oct 21, 2026
8b5da23
feat: update Faithful Answers to app 0.16.5 on public SAGA 0.7.6-rc.1
yia-mw-agent Oct 23, 2026
ee7ea4a
[Spec 301] docs: link walkthrough source paths to commit permalinks
timeleft-- Oct 23, 2026
274cf1d
fix(frontend): replace repeated frames in portrait ambient clip
omarehamid Oct 23, 2026
9d1a487
fix(frontend): correct frond anchor to its measured 0.5th percentile
omarehamid Oct 23, 2026
f2ccf10
fix(frontend): trim desktop ambient clip to hide its loop seam
omarehamid Oct 23, 2026
ed78ecf
[Spec 301] docs: add verified Dev answer card screenshots
timeleft-- Oct 23, 2026
68bd09d
[Spec 301] docs: match screenshot extensions to JPEG capture format
timeleft-- Oct 23, 2026
e4ded0e
[Spec 301] docs: add ChatGPT and Claude mobile screenshots
timeleft-- Oct 23, 2026
11d2b7d
Merge pull request #296 from iaser-ai/ambient-shadow-source-refresh
omarehamid Oct 27, 2026
95f9ece
chore(deps): adopt stable saga 0.7.6
timeleft-- Oct 28, 2026
bd80622
test(packaging): assert stable saga registry integrity
timeleft-- Oct 28, 2026
137c96a
Merge pull request #2 from timeleft--/codex/ansari-stable-076
timeleft-- Oct 28, 2026
c639f7a
fix(mcp): align workspace and container integration
timeleft-- Oct 28, 2026
c695736
fix(mcp): preserve discovery and bound upstream requests
timeleft-- Oct 28, 2026
ec2a9e6
fix(mcp): gate releases and retain distributed licence notices
timeleft-- Oct 28, 2026
f790d48
test(mcp): verify configured origins and deadline cancellation
timeleft-- Oct 28, 2026
cac034b
docs(mcp): record review repair validation
timeleft-- Oct 28, 2026
fc40c24
fix(mcp): link SDK credit to stable release branch
timeleft-- Oct 28, 2026
07bdfb1
Merge pull request #3 from MachineWisdomAI/codex/mcp-review-repairs
timeleft-- Oct 28, 2026
65112f6
docs(mcp): correct Docker context and naming after the review repairs
timeleft-- Oct 28, 2026
822c1cf
Merge pull request #4 from MachineWisdomAI/claude/mcp-doc-repairs
timeleft-- Oct 28, 2026
cd4d1f3
docs(mcp): point the walkthrough at the current source and licence
timeleft-- Oct 29, 2026
571e838
docs(mcp): record the walkthrough link update in the 301 review
timeleft-- Oct 29, 2026
6a1ba66
docs(mcp): add a Why SAGA chapter to the walkthrough
timeleft-- Oct 29, 2026
052fbaf
Merge pull request #5 from MachineWisdomAI/claude/mcp-walkthrough-rep…
timeleft-- Oct 29, 2026
3a072da
Merge pull request #323 from MachineWisdomAI/codex/ansari-faithful-an…
amrmelsayed Oct 29, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion .dockerignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Keep Docker build contexts small: both service Dockerfiles use the repo
# Keep Docker build contexts small: every service Dockerfile uses the repo
# root as context (the pnpm workspace needs the root lockfile), so anything
# not excluded here uploads on every build.
.git
Expand All @@ -14,3 +14,16 @@
**/.env.local
**/.env.*.local
apps/frontend/google-service-account
# Cloudflare Worker local state and secrets (apps/mcp)
**/.dev.vars
**/.dev.vars.*
**/.wrangler
**/dist-worker

# Credentials and private environment files; committed public examples remain available.
**/.npmrc
**/.env.*
!**/.env.ci
!**/.env.example
**/test-results
**/playwright-report
41 changes: 41 additions & 0 deletions .github/workflows/mcp.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
name: MCP application
on:
pull_request:
paths: &mcp-paths
- 'apps/mcp/**'
- 'pnpm-lock.yaml'
- 'pnpm-workspace.yaml'
- 'package.json'
- 'LICENSE'
- '.dockerignore'
- '.github/workflows/mcp.yml'
- 'packages/eslint-config/**'
push:
branches: [main, develop]
paths: *mcp-paths
permissions:
contents: read
jobs:
mcp:
name: MCP application
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
node-version: '22'
- name: Install pnpm
run: corepack enable && corepack prepare pnpm@10.33.0 --activate
- name: Install Chromium system dependencies
run: pnpm dlx playwright@1.64.0 install-deps chromium
- name: Install from the workspace lockfile
run: pnpm install --frozen-lockfile --strict-peer-dependencies --filter ansari-mcp...
- name: Verify the MCP application
run: |
pnpm mcp exec playwright install chromium
pnpm mcp verify
- name: Verify the root-context container
run: bash apps/mcp/scripts/verify-container.sh
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,3 +63,7 @@ issues for vulnerabilities.
## License

[MIT](LICENSE) © IASER

## MCP application

[`apps/mcp`](apps/mcp/README.md) exposes Ansari answers through MCP with a self-contained React card for assistant hosts. It uses public saga a2ui packages, embedded Kitab fonts and local artwork. Start it separately with `pnpm mcp build` then `pnpm mcp start`; see its README for environment variables and its Docker build, which uses the repository root as context.
Binary file modified apps/frontend/assets/video/ambient-shadow-desktop-poster.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified apps/frontend/assets/video/ambient-shadow-desktop.mp4
Binary file not shown.
Binary file modified apps/frontend/assets/video/ambient-shadow-desktop.webm
Binary file not shown.
Binary file modified apps/frontend/assets/video/ambient-shadow-poster.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified apps/frontend/assets/video/ambient-shadow.mp4
Binary file not shown.
Binary file modified apps/frontend/assets/video/ambient-shadow.webm
Binary file not shown.
31 changes: 17 additions & 14 deletions apps/frontend/lib/ambientNight.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,10 @@ export type AmbientTreatment =
* posters, which is what keeps the still and the video from stepping as
* one fades over the other.
*
* The portrait and landscape clips were graded differently — landscape
* carries barely two thirds of portrait's contrast — so they cannot
* share one grade. Anchoring each to its own numbers is what makes the
* desktop layer read like the phone one instead of a paler copy.
* The portrait and landscape clips are graded within a level of each
* other now, but anchoring each to its own measured numbers — rather
* than assuming they match — is what keeps the desktop layer reading
* like the phone one if a future re-grade pulls them apart again.
*
* Re-exporting the clips invalidates all of this; `ambientNight.test.ts`
* pins the numbers so that goes noticed rather than shipping.
Expand All @@ -78,8 +78,8 @@ export const NIGHT_SOURCE: Record<
Clip,
{ min: number; frond: number; wall: number }
> = {
portrait: { min: 0.663, frond: 0.706, wall: 0.894 },
landscape: { min: 0.773, frond: 0.776, wall: 0.91 },
portrait: { min: 0.631, frond: 0.671, wall: 0.898 },
landscape: { min: 0.635, frond: 0.671, wall: 0.894 },
};

/**
Expand All @@ -92,15 +92,18 @@ export const NIGHT_SOURCE: Record<
*
* `night.well` is 0.53–0.57 of `night.page` channel for channel. The
* shadow used to stop just above it, at 0.58, and read as too faint;
* 0.517 is 15% more depth (0.42 → 0.483), which lands the frond mass at
* the well and lets the core go a little past it. That is deliberate:
* the well was a reference point, not a limit, and what actually
* protects the shadow — detail in its darkest fronds — is held by the
* test against the filter's clamp.
* pushing the frond mass to the well (and letting the core go a little
* past it) is deliberate: the well was a reference point, not a limit,
* and what actually protects the shadow — detail in its darkest fronds —
* is held by the test against the filter's clamp.
*
* The darkest half-percent (`min`) continues past this. That tail is the
* shadow's core and it should be the deepest thing on screen; the test
* keeps it from running toward black or crushing.
* `min` continues past this. That tail is the shadow's core and it
* should be the deepest thing on screen; the test keeps it from running
* toward black or crushing. 0.517 is a chosen depth, not the floor of a
* search — `ambientNight.test.ts`'s crush-protection check only requires
* the graded `min` to clear 0.02, which a much deeper value than this
* still clears. Move it by eye against both clips and let the test catch
* an actual crush, rather than reading it as a limit the test found.
*/
export const NIGHT_DEPTH = 0.517;

Expand Down
11 changes: 11 additions & 0 deletions apps/mcp/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
node_modules/
dist/
dist-worker/
.wrangler/
test-results/
playwright-report/
.env
.env.*
!.env.example
.dev.vars
.dev.vars.*
18 changes: 18 additions & 0 deletions apps/mcp/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Build from the repository root: docker build -f apps/mcp/Dockerfile -t ansari-mcp .
FROM node:22-slim AS build
WORKDIR /repo
RUN corepack enable && corepack prepare pnpm@10.33.0 --activate
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml LICENSE ./
COPY packages packages
COPY apps/mcp/package.json apps/mcp/
RUN pnpm install --strict-peer-dependencies --frozen-lockfile --filter ansari-mcp...
COPY apps/mcp apps/mcp
RUN pnpm mcp build

FROM node:22-slim
WORKDIR /app
ENV NODE_ENV=production PORT=3000
COPY --from=build /repo/apps/mcp/dist ./dist
COPY --from=build /repo/apps/mcp/package.json ./package.json
EXPOSE 3000
CMD ["node", "dist/server/index.js"]
Loading
Loading