From 96e7902f01a9fdcb9787c03e46c75e31c258e564 Mon Sep 17 00:00:00 2001 From: Antigravity Date: Sun, 28 Jun 2026 07:32:57 +0000 Subject: [PATCH] feat: publication IA (magazine/brief/essay) + fixes critique MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Publication IA: - 4 templates (magazine, brief, essay, simple) avec CSS riche - Rewrite IA (article/exercises/tutorial/reference/mixed) - Modération avec timeout 12s + fallback safe - Quotas publish_enhance par tier (basic=2, pro=15, business=100) - Détection contenu stale (hash) - Migration DB publishedContent/publishedTemplate/publishedSourceHash Fixes: - cheerio v1.2: Element -> AnyNode (domhandler), decodeEntities cast - _isShared ajouté au type Note (champ virtuel serveur) - callout colors PDF export: extraction fonction pure testable - admin/published: guard note.userId null - Cmd+S fonctionne en mode dialog (pas seulement fullPage) i18n: - 23 clés publish* traduites dans les 15 locales - Extension Web Clipper: 13 locales mise à jour Tests: - callout-colors.test.ts (6 tests) - note-visible-in-view.test.ts (5 tests) - entitlements.test.ts + byok-entitlements.test.ts: mock usageLog + unstubAllEnvs - 199/199 tests passent Tracker: user-stories.md sync avec sprint-status.yaml --- .../hooks/state/continual-learning-index.json | 48 +- .cursor/hooks/state/continual-learning.json | 8 +- AGENTS.md | 18 +- CLAUDE.md | 2 +- DEPLOY.md | 8 +- GITEA-ACTIONS.md | 10 +- GUIDE.en.md | 18 +- GUIDE.md | 18 +- README.fr.md | 16 +- README.md | 16 +- .../spec-cross-project-audit.md | 2 +- .../spec-mcp-robustness.md | 2 +- .../spec-us4-db-inline-redesign.md | 2 +- _bmad/cis/config.yaml | 2 +- _bmad/wds/config.yaml | 2 +- .../src/components/AgentsView.tsx | 2 +- .../src/components/AuthPage.tsx | 4 +- .../src/components/ClipperSimulator.tsx | 16 +- .../src/components/LandingPage.tsx | 18 +- .../src/components/SearchModal.tsx | 2 +- .../src/components/settings/BillingTab.tsx | 4 +- .../src/components/AgentsView.tsx | 2 +- .../src/components/AuthPage.tsx | 4 +- .../src/components/ClipperSimulator.tsx | 16 +- .../src/components/LandingPage.tsx | 64 +- .../src/components/LandingPageV2.tsx | 16 +- .../src/components/LandingPageV3.tsx | 16 +- .../src/components/SearchModal.tsx | 2 +- .../src/components/settings/BillingTab.tsx | 4 +- docs/4-1-gdpr-cookie-consent.md | 2 +- docs/6-3-brainstorm-canvas-finalize.md | 4 +- docs/brief-markdown-roundtrip.md | 10 +- docs/epics.md | 6 +- docs/fonctionnalites-ia.md | 2 +- docs/guide-utilisateur/README.md | 10 +- docs/implementation-readiness-report.md | 2 +- docs/prd.md | 16 +- docs/referral-system-design.md | 4 +- docs/sprint-status.yaml | 4 +- docs/story-3.8-admin-console.md | 6 +- docs/story-chunk-embeddings.md | 12 +- docs/story-nextgen-editor.md | 8 +- docs/story-onboarding-activation.md | 14 +- docs/stripe-billing-guide.md | 18 +- docs/user-stories.md | 24 +- docs/ux-design-specification.md | 2 +- memento-mobile/app/(auth)/login.tsx | 2 +- memento-mobile/components/AISheet.tsx | 2 +- memento-mobile/components/BottomSheet.tsx | 2 +- memento-note/app/(auth)/layout.tsx | 4 +- .../(main)/settings/ai/ai-settings-header.tsx | 4 +- .../app/(main)/settings/data/page.tsx | 2 +- .../app/(main)/settings/integrations/page.tsx | 4 +- memento-note/app/(main)/settings/mcp/page.tsx | 6 +- memento-note/app/(public)/c/[slug]/page.tsx | 403 +++++++++++ memento-note/app/(public)/p/[slug]/page.tsx | 651 +++++++++++++++--- memento-note/app/actions/note-illustration.ts | 2 +- memento-note/app/actions/notes-publishing.ts | 3 + memento-note/app/actions/organize-notebook.ts | 7 +- memento-note/app/api/admin/published/route.ts | 2 +- .../app/api/ai/generate-exercises/route.ts | 21 +- .../app/api/ai/notebook-publish/route.ts | 77 +++ .../app/api/ai/notebook-wizard/route.ts | 3 + memento-note/app/api/ai/study-plan/route.ts | 12 +- memento-note/app/api/chat/route.ts | 14 +- .../app/api/integrations/readwise/route.ts | 2 +- .../app/api/notebooks/[id]/publish/route.ts | 116 ++++ memento-note/app/api/notes/publish/route.ts | 225 +++++- .../api/onboarding/seed-demo-notes/route.ts | 4 +- memento-note/app/api/user/export/route.ts | 2 +- .../components/ai/byok-settings-panel.tsx | 2 +- .../auto-label-suggestion-dialog.tsx | 1 + .../components/contextual-ai-chat.tsx | 9 +- memento-note/components/home-client.tsx | 132 +++- memento-note/components/landing-page.tsx | 6 +- .../note-editor/note-editor-context.tsx | 7 +- .../note-editor/note-editor-toolbar.tsx | 459 ++++++++++-- .../components/note-editor/publish-dialog.tsx | 103 +-- .../components/organize-notebook-dialog.tsx | 2 +- memento-note/components/search-modal.tsx | 2 +- .../components/settings/billing-plans.tsx | 2 +- .../components/settings/inline-paywall.tsx | 1 + .../components/settings/usage-breakdown.tsx | 1 + memento-note/components/sidebar.tsx | 26 +- .../structured-views-intro.tsx | 45 +- memento-note/components/usage-meter.tsx | 6 +- .../wizard/notebook-organizer-dialog.tsx | 3 +- .../wizard/notebook-site-dialog.tsx | 398 +++++++++++ .../wizard/study-planner-dialog.tsx | 1 + memento-note/extension/README.md | 12 +- .../extension/_locales/ar/messages.json | 18 +- .../extension/_locales/de/messages.json | 30 +- .../extension/_locales/en/messages.json | 30 +- .../extension/_locales/es/messages.json | 22 +- .../extension/_locales/fa/messages.json | 26 +- .../extension/_locales/fr/messages.json | 30 +- .../extension/_locales/it/messages.json | 28 +- .../extension/_locales/ja/messages.json | 18 +- .../extension/_locales/ko/messages.json | 20 +- .../extension/_locales/nl/messages.json | 30 +- .../extension/_locales/pl/messages.json | 28 +- .../extension/_locales/pt/messages.json | 28 +- .../extension/_locales/ru/messages.json | 22 +- .../extension/_locales/zh/messages.json | 22 +- memento-note/extension/content.js | 2 +- memento-note/extension/diagnose.js | 6 +- .../_locales/ar/messages.json | 18 +- .../_locales/de/messages.json | 30 +- .../_locales/en/messages.json | 30 +- .../_locales/es/messages.json | 22 +- .../_locales/fa/messages.json | 26 +- .../_locales/fr/messages.json | 30 +- .../_locales/it/messages.json | 28 +- .../_locales/ja/messages.json | 18 +- .../_locales/ko/messages.json | 20 +- .../_locales/nl/messages.json | 30 +- .../_locales/pl/messages.json | 28 +- .../_locales/pt/messages.json | 28 +- .../_locales/ru/messages.json | 22 +- .../_locales/zh/messages.json | 22 +- .../extension/dist-chrome-store/content.js | 2 +- .../extension/dist-chrome-store/diagnose.js | 6 +- .../dist-chrome-store/i18n/translations.json | 352 +++++----- .../dist-chrome-store/sidepanel.html | 4 +- .../dist-chrome-store/test-sidepanel.html | 2 +- memento-note/extension/i18n/translations.json | 352 +++++----- memento-note/extension/sidepanel.html | 4 +- memento-note/extension/test-sidepanel.html | 2 +- .../notebook-publish-analyzer.service.ts | 102 +++ .../ai/services/notebook-wizard.service.ts | 42 +- .../ai/services/publish-enhance.service.ts | 149 ++++ .../lib/ai/services/study-planner.service.ts | 10 +- memento-note/lib/ai/tools/pptx.tool.ts | 4 +- memento-note/lib/auth-client.ts | 2 +- memento-note/lib/brainstorm/export-pptx.ts | 6 +- memento-note/lib/editor/callout-colors.ts | 19 + memento-note/lib/entitlements.ts | 132 +++- memento-note/lib/plan-entitlements.ts | 21 +- memento-note/lib/publish/process-note-html.ts | 111 +++ memento-note/lib/publish/shared-css.ts | 286 ++++++++ memento-note/lib/publish/template-render.ts | 116 ++++ .../lib/publish/transform-editor-blocks.ts | 208 ++++++ memento-note/lib/publish/types.ts | 21 + memento-note/lib/quota-utils.ts | 1 + memento-note/lib/sanitize-content.ts | 26 + memento-note/lib/types.ts | 5 + memento-note/locales/ar.json | 53 +- memento-note/locales/de.json | 51 +- memento-note/locales/en.json | 75 +- memento-note/locales/es.json | 51 +- memento-note/locales/fa.json | 41 +- memento-note/locales/fr.json | 75 +- memento-note/locales/hi.json | 53 +- memento-note/locales/it.json | 51 +- memento-note/locales/ja.json | 51 +- memento-note/locales/ko.json | 53 +- memento-note/locales/nl.json | 51 +- memento-note/locales/pl.json | 51 +- memento-note/locales/pt.json | 47 +- memento-note/locales/ru.json | 51 +- memento-note/locales/zh.json | 51 +- .../migration.sql | 4 + memento-note/prisma/schema.prisma | 20 + memento-note/scripts/setup-env.js | 4 +- .../tests/unit/byok-entitlements.test.ts | 2 + .../tests/unit/callout-colors.test.ts | 42 ++ memento-note/tests/unit/entitlements.test.ts | 4 + .../tests/unit/note-visible-in-view.test.ts | 53 ++ ssh-devSanbox-setup.md | 4 +- 169 files changed, 5382 insertions(+), 1527 deletions(-) create mode 100644 memento-note/app/(public)/c/[slug]/page.tsx create mode 100644 memento-note/app/api/ai/notebook-publish/route.ts create mode 100644 memento-note/app/api/notebooks/[id]/publish/route.ts create mode 100644 memento-note/components/wizard/notebook-site-dialog.tsx create mode 100644 memento-note/lib/ai/services/notebook-publish-analyzer.service.ts create mode 100644 memento-note/lib/ai/services/publish-enhance.service.ts create mode 100644 memento-note/lib/editor/callout-colors.ts create mode 100644 memento-note/lib/publish/process-note-html.ts create mode 100644 memento-note/lib/publish/shared-css.ts create mode 100644 memento-note/lib/publish/template-render.ts create mode 100644 memento-note/lib/publish/transform-editor-blocks.ts create mode 100644 memento-note/lib/publish/types.ts create mode 100644 memento-note/prisma/migrations/20260621120000_add_published_ai_content/migration.sql create mode 100644 memento-note/tests/unit/callout-colors.test.ts create mode 100644 memento-note/tests/unit/note-visible-in-view.test.ts diff --git a/.cursor/hooks/state/continual-learning-index.json b/.cursor/hooks/state/continual-learning-index.json index 2ac6952..11735f1 100644 --- a/.cursor/hooks/state/continual-learning-index.json +++ b/.cursor/hooks/state/continual-learning-index.json @@ -2,24 +2,68 @@ "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/0c6fb2d9-1b82-4ca3-b0f4-f8373a62faca/0c6fb2d9-1b82-4ca3-b0f4-f8373a62faca.jsonl": 1778182618469, "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/137b1f4b-59d9-4ce6-8d74-01f7cbae2ba7/137b1f4b-59d9-4ce6-8d74-01f7cbae2ba7.jsonl": 1778966645519, "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/16214191-7091-4aef-a309-f922d351d79f/16214191-7091-4aef-a309-f922d351d79f.jsonl": 1779911218415, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/16214191-7091-4aef-a309-f922d351d79f/subagents/106b4ed1-1305-459a-bc51-a868f74ae8ed.jsonl": 1779663104529, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/16214191-7091-4aef-a309-f922d351d79f/subagents/2c9092f9-a673-46f8-83e3-f581c163efad.jsonl": 1779603239708, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/16214191-7091-4aef-a309-f922d351d79f/subagents/2f857168-9a7e-4b49-bd58-9c03c7323e3a.jsonl": 1779698370371, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/16214191-7091-4aef-a309-f922d351d79f/subagents/35f87c99-cea4-4cc2-8061-7327b65be5c8.jsonl": 1779629959373, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/16214191-7091-4aef-a309-f922d351d79f/subagents/43896b0f-286f-40ef-afcc-8ab38ac791a1.jsonl": 1779632608794, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/16214191-7091-4aef-a309-f922d351d79f/subagents/456c9498-caf4-4fb8-974f-84fd08825112.jsonl": 1779639839217, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/16214191-7091-4aef-a309-f922d351d79f/subagents/4a15f5aa-adba-4448-a04c-5116d3963ae0.jsonl": 1779665958349, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/16214191-7091-4aef-a309-f922d351d79f/subagents/5a3ecd13-c94d-4f95-8603-2196fc3dc2ff.jsonl": 1779910037067, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/16214191-7091-4aef-a309-f922d351d79f/subagents/5de1ff5f-8122-44dd-abec-ec92171082ff.jsonl": 1779612012789, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/16214191-7091-4aef-a309-f922d351d79f/subagents/6145ac4f-4bd4-4873-9fa5-8567e6dbeeab.jsonl": 1779692411702, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/16214191-7091-4aef-a309-f922d351d79f/subagents/8f3177e4-49d3-4178-a58f-cceb8cca7fc1.jsonl": 1779737949557, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/16214191-7091-4aef-a309-f922d351d79f/subagents/921b4981-f949-4855-ba62-84e9c0db5ee8.jsonl": 1779647030219, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/16214191-7091-4aef-a309-f922d351d79f/subagents/98014b6d-83e5-44c8-b808-f98eb29fb4a1.jsonl": 1779619178702, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/16214191-7091-4aef-a309-f922d351d79f/subagents/a7a904f4-86df-4829-b77e-4beabd9b059e.jsonl": 1779649674956, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/16214191-7091-4aef-a309-f922d351d79f/subagents/a84a4496-811b-4012-aca4-2244045cbbff.jsonl": 1779660980933, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/16214191-7091-4aef-a309-f922d351d79f/subagents/b0e765c1-5ee7-4beb-bd77-0f9b9a151923.jsonl": 1779660980513, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/16214191-7091-4aef-a309-f922d351d79f/subagents/c03896af-576a-43ab-a799-4f16bab35269.jsonl": 1779644786488, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/16214191-7091-4aef-a309-f922d351d79f/subagents/c37d717d-f2e2-4dd0-9ed9-839ceeb1cc4d.jsonl": 1779660981864, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/16214191-7091-4aef-a309-f922d351d79f/subagents/c86141a3-3209-4b9a-9766-07aea5dc9a69.jsonl": 1779658292250, "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/2e0ce74c-a31e-49d8-a0d0-a8b224813533/2e0ce74c-a31e-49d8-a0d0-a8b224813533.jsonl": 1778188935902, "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/38000361-5c66-4032-8e1e-ef405e843de0/38000361-5c66-4032-8e1e-ef405e843de0.jsonl": 1778968570815, "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/394af47d-c5cd-4cef-bef2-2192717439f8/394af47d-c5cd-4cef-bef2-2192717439f8.jsonl": 1778951280378, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/394af47d-c5cd-4cef-bef2-2192717439f8/subagents/0927d889-66b3-4007-87b4-15f8ad9e01f0.jsonl": 1778951401282, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/394af47d-c5cd-4cef-bef2-2192717439f8/subagents/0ddd911c-403c-4d90-a189-069679758338.jsonl": 1778951533153, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/394af47d-c5cd-4cef-bef2-2192717439f8/subagents/59f0c95a-415f-440a-bae2-96020aca9033.jsonl": 1778951400523, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/394af47d-c5cd-4cef-bef2-2192717439f8/subagents/dc63a53e-55bc-4175-b49e-637b408138ac.jsonl": 1778951399831, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/394af47d-c5cd-4cef-bef2-2192717439f8/subagents/f0ad176d-04d7-4d9a-82b8-65273acd313a.jsonl": 1778946728971, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/401dfc2b-5e6d-4479-8702-7b544e6de7de/401dfc2b-5e6d-4479-8702-7b544e6de7de.jsonl": 1781970053022, "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/5039e847-3035-4f43-b184-46aeceb06764/5039e847-3035-4f43-b184-46aeceb06764.jsonl": 1778838518325, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/5039e847-3035-4f43-b184-46aeceb06764/subagents/e13034a9-05cf-47e3-afa0-f6b142866ab1.jsonl": 1778837589740, "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/5923e37e-370d-4867-95d0-751622982859/5923e37e-370d-4867-95d0-751622982859.jsonl": 1778968000388, "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/5ac57758-0a3c-4502-9473-b63413a39013/5ac57758-0a3c-4502-9473-b63413a39013.jsonl": 1778921288478, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/5ac57758-0a3c-4502-9473-b63413a39013/subagents/b2833767-42d4-4d3f-952e-b961ea5538d3.jsonl": 1778917054076, "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/65570f8a-5cd2-4573-b2d9-0983f2922d1f/65570f8a-5cd2-4573-b2d9-0983f2922d1f.jsonl": 1778231172346, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/65570f8a-5cd2-4573-b2d9-0983f2922d1f/subagents/b9a447c6-5a63-4882-b878-5aee9756ce25.jsonl": 1778227602626, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/65570f8a-5cd2-4573-b2d9-0983f2922d1f/subagents/e2881041-49a0-4dca-8df1-614a7a070038.jsonl": 1778226771429, "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/7b6c0ed0-caad-4157-b048-535452685b73/7b6c0ed0-caad-4157-b048-535452685b73.jsonl": 1778852401511, "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/8c2fc9f5-c359-4c67-a0f5-325ee44cebc9/8c2fc9f5-c359-4c67-a0f5-325ee44cebc9.jsonl": 1778751052502, "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/90c791ad-a274-4673-b5f6-ec1bccaccc98/90c791ad-a274-4673-b5f6-ec1bccaccc98.jsonl": 1779566465299, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/90c791ad-a274-4673-b5f6-ec1bccaccc98/subagents/1f1b2143-916d-4398-a8e0-4bfb993df3d7.jsonl": 1779547337406, "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/92d73875-5939-48fb-9f68-86c88b0f2ff7/92d73875-5939-48fb-9f68-86c88b0f2ff7.jsonl": 1778966017038, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/92d73875-5939-48fb-9f68-86c88b0f2ff7/subagents/401ab052-4346-4e0d-8ca9-108c0a5b1a61.jsonl": 1778964224375, "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/9902a438-467f-4d57-8f43-28e7d579a95f/9902a438-467f-4d57-8f43-28e7d579a95f.jsonl": 1778839341001, "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/a64d78ce-86d3-4ec8-8f79-7589ad05a62c/a64d78ce-86d3-4ec8-8f79-7589ad05a62c.jsonl": 1778846298067, "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/a7a904f4-86df-4829-b77e-4beabd9b059e/a7a904f4-86df-4829-b77e-4beabd9b059e.jsonl": 1779649690323, "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/af84066e-c0c2-435e-8caf-73037ebf4320/af84066e-c0c2-435e-8caf-73037ebf4320.jsonl": 1779569075175, "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/b85430f3-4520-47fd-9b4b-5200ca340a36/b85430f3-4520-47fd-9b4b-5200ca340a36.jsonl": 1779039005865, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/b85430f3-4520-47fd-9b4b-5200ca340a36/subagents/f973ca95-be8f-4c00-a00d-4f026e5bd4dc.jsonl": 1779026546575, "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/ca85061e-6af9-4250-8dc7-9c3bb4839c48/ca85061e-6af9-4250-8dc7-9c3bb4839c48.jsonl": 1778849848444, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/ca85061e-6af9-4250-8dc7-9c3bb4839c48/subagents/3bbaec3b-7dce-4eee-916e-7673710c1e13.jsonl": 1778848753214, "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/d92dfb04-c148-4a14-a48a-39d4c634caee/d92dfb04-c148-4a14-a48a-39d4c634caee.jsonl": 1778861502433, "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/e3745f62-c3b9-4a21-8942-71bc6f603f77/e3745f62-c3b9-4a21-8942-71bc6f603f77.jsonl": 1778018654221, - "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/fb7fd15f-b9ef-490b-a1de-8238ea026e53/fb7fd15f-b9ef-490b-a1de-8238ea026e53.jsonl": 1779998515529 -} + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/e3745f62-c3b9-4a21-8942-71bc6f603f77/subagents/f028b51a-8a84-4a45-8866-95cb05ca9727.jsonl": 1778014992372, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/ea18d177-228d-4e44-8e79-8957e6f2da39/ea18d177-228d-4e44-8e79-8957e6f2da39.jsonl": 1781975528735, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/ea18d177-228d-4e44-8e79-8957e6f2da39/subagents/375b2e07-202f-4e8e-9e80-718bbdf88005.jsonl": 1781973640324, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/ea18d177-228d-4e44-8e79-8957e6f2da39/subagents/6cba0291-51b3-42d9-939c-2e95d01128f8.jsonl": 1781975383642, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/ea18d177-228d-4e44-8e79-8957e6f2da39/subagents/d6546245-4e3f-47dd-bc3e-39e1af726138.jsonl": 1781973598054, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/ec2b194c-c67e-4089-a434-6daff69ca69d/ec2b194c-c67e-4089-a434-6daff69ca69d.jsonl": 1782057901186, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/ec2b194c-c67e-4089-a434-6daff69ca69d/subagents/99e20a50-1e7b-4ed8-931a-5c4c7a65ea4d.jsonl": 1782037965469, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/f0ad176d-04d7-4d9a-82b8-65273acd313a/subagents/96507ccc-6150-4260-a55c-94abd2b57441.jsonl": 1778946698447, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/fb7fd15f-b9ef-490b-a1de-8238ea026e53/fb7fd15f-b9ef-490b-a1de-8238ea026e53.jsonl": 1780001507987, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/fb7fd15f-b9ef-490b-a1de-8238ea026e53/subagents/a5601ff1-7934-4872-acd8-266e416c3680.jsonl": 1779998536313, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/ec2b194c-c67e-4089-a434-6daff69ca69d/subagents/993325c9-a748-4183-9b2d-866cc0d73338.jsonl": 1782056882673, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/ec2b194c-c67e-4089-a434-6daff69ca69d/subagents/e483aeb3-3b38-4f7f-9ad8-d79f362c102d.jsonl": 1782057932702 +} \ No newline at end of file diff --git a/.cursor/hooks/state/continual-learning.json b/.cursor/hooks/state/continual-learning.json index 9e672c9..222f53f 100644 --- a/.cursor/hooks/state/continual-learning.json +++ b/.cursor/hooks/state/continual-learning.json @@ -1,8 +1,8 @@ { "version": 1, - "lastRunAtMs": 1781973755639, - "turnsSinceLastRun": 4, - "lastTranscriptMtimeMs": 1781973755517.7488, - "lastProcessedGenerationId": "bcd357e0-6c9c-4e2b-b7dd-ee6d7c50d52a", + "lastRunAtMs": 1782057894900, + "turnsSinceLastRun": 15, + "lastTranscriptMtimeMs": 1782057894796.2778, + "lastProcessedGenerationId": "3c5517c8-a954-41c8-ba2d-9a8578c05e67", "trialStartedAtMs": null } diff --git a/AGENTS.md b/AGENTS.md index ec73a6f..92b1ed8 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,31 +1,31 @@ -# Agent memory (Momento) +# Agent memory (Memento) ## Learned User Preferences - Préfère les échanges en français, avec des explications détaillées et claires (éviter le jargon flou). - Interface : tout libellé via i18n dans les 15 fichiers `memento-note/locales/*.json` (FR et EN comme références de contenu) ; éviter le texte en dur ; traductions **contextuelles** (sens produit, pas mot à mot — ex. « connecter votre propre fournisseur ») ; libellés FR **lisibles** (éviter jargon non expliqué : « wiki », « embed », etc.) et **aide contextuelle** où l'UX l'exige ; lors d'une traduction complète, mettre à jour toutes les locales concernées ; si l'utilisateur demande seulement les **clés i18n**, ajouter les clés (souvent EN/FR) sans remplir les 15 locales — il traduit souvent avec un autre modèle. -- Base de données : **INTERDIT TOTALEMENT** de lancer `prisma db push --force-reset`, `prisma migrate reset`, `DROP TABLE`, `TRUNCATE`, `pg_restore` avec clean, ou TOUTE commande qui vide/supprime des données — MÊME SI l'utilisateur est d'accord — sans avoir d'abord : (1) dumpé la base avec `bash /home/devparsa/dev/Momento/dump-db.sh`, (2) vérifié le dump fait au moins 1Mo, (3) obtenu un "OUI" explicite de l'utilisateur. **4 incidents de perte de données documentés (14/05, 15/05 x2, 16/05). NE JAMAIS REFAIRE ÇA.** +- Base de données : **INTERDIT TOTALEMENT** de lancer `prisma db push --force-reset`, `prisma migrate reset`, `DROP TABLE`, `TRUNCATE`, `pg_restore` avec clean, ou TOUTE commande qui vide/supprime des données — MÊME SI l'utilisateur est d'accord — sans avoir d'abord : (1) dumpé la base avec `bash /home/devparsa/dev/Memento/dump-db.sh`, (2) vérifié le dump fait au moins 1Mo, (3) obtenu un "OUI" explicite de l'utilisateur. **4 incidents de perte de données documentés (14/05, 15/05 x2, 16/05). NE JAMAIS REFAIRE ÇA.** - Design produit : migration depuis `architectural-grid1` (base) et `architectural-grid` (prototype UI courant) ; **consulter le prototype avant toute implémentation UI** ; logique liste/carte puis contenu au clic ; parité actions liste/carte (menus « … », déplacer, génération SVG, etc.) ; contraste éditeur clair / sidebar sombre ; retirer thèmes obsolètes ; **pas de refresh/revalidation complets inutiles** (aligné prototype — mutations optimistes, pas de `revalidatePath` systématique ni resync depuis `initialNotes`) ; **Memory Echo en section inline dans l'éditeur** (pas l'ancienne modale) — similarité sur contenu **représentatif** (pas de troncature arbitraire type 200/800 car.) ; **recherche (sidebar / résultats, ex. flux « ouvrir la note ») et navigation liste des notes** (modes affichage, icônes vs initiales…) : suivre **`SearchModal` et les patterns actuels** dans `architectural-grid`, pas une approximation ou un ancien flux ; **sidebar rail** (`sidebar.tsx`) : une seule icône active ; `activeView` synchronisé avec pathname et query (`/insights`, `/revision`, `/home?reminders=1`) ; panneau latéral contextuel par route (pas la liste carnets sur `/insights` ou Rappels) ; **`/insights` (insights sémantiques)** : suivre **`InsightsView.tsx` + graphe réseau associé dans le prototype** (ex. composition type `NetworkGraph.tsx`) ; **distincte de `/graph`** ; ne pas substituer par une UX « géométrique » décorative ou un regroupement par carnet hors spec prototype ; lorsque données clusters en retard ou partiellement périmées, **montrer l’état dégradé exploitable plutôt qu’une page vide** ; si l'utilisateur hésite entre variantes UX, **trancher pour le design prototype** plutôt que multiplier les toggles. - Locale persane : dates en calendrier iranien (conversion), chiffres persans, et vérification RTL/positionnement global (app **et** extension Web Clipper) ; **Memory Echo** et recherche sémantique doivent fonctionner en persan (RTL, embeddings — pas de contournement « EN only ») ; attention à ne pas confondre un nom de carnet (ex. « Persan ») avec le libellé de langue. - Flux Excalidraw / diagrammes générés : accès via notification en plus d'une simple redirection ; priorité à la mise en page et au texte contenu dans les formes ; proposer des modes visuels (ex. coloré vs plus austère) tout en visant un rendu proche du style Excalidraw (polices, look). - **Interdiction d'écrire des tests** sauf demande explicite ; en CI, seul `npm run test:unit` (`tests/unit/**`) — pas `tests/migration/` ; ne jamais générer de code superflu. - Déploiement : privilégier le chemin rapide (artifact Next.js en CI + `Dockerfile.prebuilt`) ; CI/CD très robuste (pas d'image Docker obsolète en prod, pas de migrations/schéma DB via le workflow deploy) ; éviter les rebuild Docker complets inutiles (~15 min par itération) ; **ne pas pousser un déploiement quand des features clés sont inachevées** ; ne pas insister sur le déploiement tant que le produit n'est pas fini ou meilleur. **CI/CD Gitea spécifique** : (1) `actions/upload-artifact` et `download-artifact` doivent utiliser **@v3** (pas @v4 — non supporté par Gitea, erreur `GHESNotSupportedError`) ; (2) `Dockerfile.socket.prebuilt` doit utiliser `--legacy-peer-deps` dans `npm install` (conflit TipTap 3.22.5 vs 3.23.6) ; (3) le serveur de prod (192.168.1.190) **ne peut pas pull Docker Hub** (DNS cassé) — le build Docker complet échoue, seul le chemin prebuilt artifact fonctionne ; (4) `docker-entrypoint.sh` applique les migrations Prisma **avant** de démarrer le serveur Next.js (ordre correct) ; (5) rollback d'urgence : `docker tag memento-memento-note:rollback memento-memento-note:latest && docker compose up -d --force-recreate memento-note` ; **TRAVAILLER SUR UNE BRANCHE** pendant le dev, ne push sur `main` que quand le code est testé et fonctionnel — chaque push sur `main` déclenche un déploiement automatique en production. - Authentification : priorité à l'inscription/connexion via **Google OAuth** (plutôt qu'un compte email/mot de passe) ; exiger une vraie déconnexion (invalidation session/cookies — pas de reconnexion implicite, y compris en navigation privée). -- Priorité absolue à la qualité UX, même si l'implémentation est complexe (« je m'en fous si c'est complexe ») ; **ne jamais affirmer qu'un correctif ou une feature est fait sans vérification réelle** (app, prototype `architectural-grid`, ou test), **notamment navigation recherche/liste notes et vue `/insights` vs fichiers prototype** — l'utilisateur sanctionne fermement les fausses déclarations ; **ouverture note liée depuis l'éditeur** (ex. bloc live « Ouvrir ») : **split peek inline** animé (`lib/note-peek-sync.ts`, `note-editor-split-peek.tsx` — éditeur courant à **gauche**, note liée en lecture seule à **droite** en LTR ; **inversé en RTL** `fa`/`ar`), **pas nouvel onglet** ; **ne jamais annuler du code non commité** (`git checkout`, reset fichier) **sans demande explicite** (perte de travail documentée, ex. drag handle éditeur) ; **correction i18n ou spec doc** : **ne pas refondre logique/UI** hors scope (ex. US-4 `structuredViewBlock` — garder le dual-mode base locale + lien carnet, pas de suppression du mode local) ; en frustration ou pour déléguer, **prévoir des prompts / briefs d'implémentation détaillés** (autre modèle ou dev), en plus des briefs outil de design. -- Livraison : **une user story à la fois**, tester et valider avec l'utilisateur avant la suivante (pas d'auto-validation ni d'enchaînement de code non demandé) ; suivi dans `docs/user-stories.md`. -- Quand demandé, **fournir des briefs pour un outil de design externe** plutôt que produire les maquettes UX soi-même. +- Priorité absolue à la qualité UX, même si l'implémentation est complexe (« je m'en fous si c'est complexe ») ; **ne jamais affirmer qu'un correctif ou une feature est fait sans vérification réelle** (app, prototype `architectural-grid`, ou test), **notamment navigation recherche/liste notes et vue `/insights` vs fichiers prototype** — l'utilisateur sanctionne fermement les fausses déclarations ; **ouverture note liée depuis l'éditeur** (ex. bloc live « Ouvrir ») : **split peek inline** animé (`lib/note-peek-sync.ts`, `note-editor-split-peek.tsx` — éditeur courant à **gauche**, note liée en lecture seule à **droite** en LTR ; **inversé en RTL** `fa`/`ar`), **pas nouvel onglet** ; **ne jamais annuler du code non commité** (`git checkout`, reset fichier) **sans demande explicite** (perte de travail documentée, ex. drag handle éditeur) ; **ne jamais remettre du code que l'utilisateur a explicitement retiré sans demander d'abord** (ex. `reserveUsageOrThrow` retiré intentionnellement de `organize-notebook.ts` — agent l'a remis sans demander → user mécontent) ; **correction i18n ou spec doc** : **ne pas refondre logique/UI** hors scope (ex. US-4 `structuredViewBlock` — garder le dual-mode base locale + lien carnet, pas de suppression du mode local) ; en frustration ou pour déléguer, **prévoir des prompts / briefs d'implémentation détaillés** (autre modèle ou dev), en plus des briefs outil de design. +- Livraison : **une user story à la fois**, tester et valider avec l'utilisateur avant la suivante (pas d'auto-validation ni d'enchaînement de code non demandé) ; suivi dans `docs/user-stories.md` ; briefs pour outil de design externe sur demande. +- **Facturation & quotas IA** : limites mensuelles, tiers (BASIC/PRO/BUSINESS/ENTERPRISE) et Price IDs Stripe via **Admin > Facturation & quotas** (`/admin/billing`) — pas via `.env` pour le métier ; secrets Stripe (`STRIPE_SECRET_KEY`, webhook) restent en env serveur ; doc `memento-note/docs/admin-billing-quotas-guide.md`. ## Learned Workspace Facts - Application Next.js principalement sous `memento-note/`. -- Référentiels design du workspace : `architectural-grid1/` et `architectural-grid/` à la racine du repo Momento. +- Référentiels design du workspace : `architectural-grid1/` et `architectural-grid/` à la racine du repo Memento. - i18n : 15 fichiers sous `memento-note/locales/` (de, en, es, fr, it, pt, nl, pl, ru, zh, ja, ko, ar, fa, hi) ; logique sous `memento-note/lib/i18n/` ; référence `en.json` (~2218 clés) ; auditer les « non traduits » par flatten EN vs locale (souvent valeurs identiques à l'EN). - Workflow BMad : stories sous `docs/` (ex. `3-4-host-pays-session-logic.md`), suivi sprint dans `docs/sprint-status.yaml` et stories courantes dans `docs/user-stories.md` ; skills sous `.claude/skills/bmad-*` ; `_bmad-output/planning-artifacts` souvent vide — planification de référence dans `docs/` ; préférer **une user story par feature** (pas de stories groupées). -- PostgreSQL Docker (`memento-postgres`) sur le port 5433 ; Redis Docker (`memento-redis`) sur le port 6379 (voir règles projet). -- Règles opérationnelles Prisma et sécurité base de données décrites dans `CLAUDE.md` à la racine du repo. +- PostgreSQL Docker (`memento-postgres`) port 5433 ; Redis (`memento-redis`) port 6379 ; règles Prisma/DB dans `CLAUDE.md`. +- **Admin facturation** : page `/admin/billing` (`billing-admin-client.tsx`, actions `admin-billing.ts`) — quotas par feature IA et config Stripe métier en base, effet ~60 s ; guide `memento-note/docs/admin-billing-quotas-guide.md`. - Production : dépôt `/opt/memento` sur `192.168.1.190`, conteneur `memento-note` sur le port **3000**, URL publique **https://memento-note.com** (nginx + Cloudflare ; ancien domaine note.parsanet.org) ; `NEXTAUTH_URL` aligné sur ce domaine ; email sortant via **Resend** (`SMTP_FROM` ex. `noreply@memento-note.com`, domaine vérifié sur resend.com) ; deploy (`deploy.yaml` / `deploy-prod.sh`) **sans toucher Postgres** (pas de `postgresql-client`, pas de migrations auto en prod). - CI/CD Gitea : `.gitea/workflows/ci.yaml` — CI sur `ubuntu-24.04`, deploy sur runner **`docker-host`** (sur le serveur) ; deploy manuel via `.gitea/workflows/deploy.yaml` ou `bash scripts/deploy-prod.sh`. - Migrations prebuilt + vérif deploy : `docker compose exec memento-note node ./node_modules/prisma/build/index.js migrate deploy` (pas `npx prisma`) ; helper `scripts/migrate-docker.sh` ; `GET /api/build-info` (SHA Git) ; comparer `127.0.0.1:3000` et domaine Cloudflare — purger cache si versions divergent ; 403 `/api/manifest` côté domaine = souvent Cloudflare. - Éditeur riche : `rich-text-editor.tsx` — `immediatelyRender: false` ; activer **`shouldRerenderOnTransaction: false`** (quick win perf TipTap 2.5) ; **drag handle / menu bloc** via **`@tiptap/extension-drag-handle-react`** (spec officielle — pas de double plugin `DragHandleExtension` + composant React, pas de repositionnement maison) ; poignée dans **colonne gutter fixe** du wrapper (padding + `getReferencedVirtualElement`), pas sur le bord des listes/numéros ; CSS : **pas `opacity:0` sur `.drag-handle`** (visibilité gérée par le plugin) ; config/callbacks **stables hors composant** ; fondation blocs : `tiptap-unique-id-extension.ts` / **`data-id` persisté à la sauvegarde** (références « Copier la référence ») ; **Smart Paste** : `lib/editor/smart-paste-extension.ts` ; **peek split** note source : `lib/note-peek-sync.ts` + `note-editor-split-peek.tsx` ; **US-4 `structuredViewBlock`** (`tiptap-structured-view-block-extension.tsx`, `structured-view-block-embed.tsx`) : **dual-mode** — base locale autonome par défaut (`/database`, `/vue`, `isLocal: true`) + option « Lier à un carnet » (Structured Views) ; i18n `structuredViewBlock.*` ; **rejeté** : ancien `databaseBlock` « Auteurs & Œuvres » et spec embed-only `docs/story-nextgen-editor-us4-redesign.md` ; epic active `docs/story-nextgen-editor.md` — priorité **PERF > NEXTGEN > UX > MOBILE > MARKDOWN**. - Sync mutations notes entre composants : `memento-note/lib/note-change-sync.ts` (`emitNoteChange`, événement `NOTE_CHANGE_EVENT`). -- Roadmap / écart prototype vs prod : Web Clipper — **`ClipperSimulator.tsx` = référence design uniquement** (pas de simulateur en prod) ; extension **`memento-note/extension/`** v0.3 **Side Panel** (clip page/sélection/lien ; popup Chrome se ferme au clic page — Side Panel pour la sélection) ; i18n extension **15 langues** (`_locales/`, détection locale navigateur ; script `extension/i18n/generate-translations.cjs`) ; **`host_permissions`** incl. LAN ; **URL serveur configurable en dev**, adresse prod figée en release ; cookies/session alignés avec l'instance cible ; **Flashcards IA SM-2 livrées** : `/revision`, `/api/flashcards/*`, génération depuis l'éditeur (GraduationCap) — réf. prototype `RevisionView.tsx` ; **Structured Views partiellement livrées** : schéma par carnet, Table/Kanban, champs partagés et valeurs par note (`/home` + toolbar carnet) — **suivi de tâches par carnet via Kanban structuré** (pas de vue agrégée Notes/Tâches sur la home ; cases à cocher inline dans les notes) ; **Living Blocks partiellement livrées** : `data-id`, Smart Paste, nœud `liveBlock`, détacher/supprimer, peek split — **US-NEXTGEN-EDITOR** en cours (`docs/story-nextgen-editor.md`, **US-TEMPORAL reporté**) ; encore en gap : transclusion bidirectionnelle complète, graphe knowledge enrichi (`GraphKnowledgeMap.tsx`), **insights sémantiques** (`InsightsView.tsx`, **`/insights` ≠ `/graph`**) ; publication **Chrome Web Store** : icônes 16/48/128, privacy policy, `host_permissions` prod restreints vs build dev. +- Roadmap / écart prototype vs prod : Web Clipper — **`ClipperSimulator.tsx` = référence design uniquement** (pas de simulateur en prod) ; extension **`memento-note/extension/`** v0.3 **Side Panel** (clip page/sélection/lien ; popup Chrome se ferme au clic page — Side Panel pour la sélection) ; i18n extension **15 langues** (`_locales/`, détection locale navigateur ; script `extension/i18n/generate-translations.cjs`) ; **`host_permissions`** incl. LAN ; **URL serveur configurable en dev**, adresse prod figée en release ; cookies/session alignés avec l'instance cible ; **Flashcards IA SM-2 livrées** : `/revision`, `/api/flashcards/*`, génération depuis l'éditeur (GraduationCap) — réf. prototype `RevisionView.tsx` ; **Structured Views partiellement livrées** : schéma par carnet, Table/Kanban, champs partagés et valeurs par note (`/home` + toolbar carnet) — **suivi de tâches par carnet via Kanban structuré** (pas de vue agrégée Notes/Tâches sur la home ; cases à cocher inline dans les notes) ; **Living Blocks partiellement livrées** : `data-id`, Smart Paste, nœud `liveBlock`, détacher/supprimer, peek split — **US-NEXTGEN-EDITOR** en cours (`docs/story-nextgen-editor.md`, **US-TEMPORAL reporté**) ; encore en gap : transclusion bidirectionnelle complète, graphe knowledge enrichi (`GraphKnowledgeMap.tsx`), **insights sémantiques** (`InsightsView.tsx`, **`/insights` ≠ `/graph`**) ; publication **Chrome Web Store** : icônes 16/48/128, privacy policy, `host_permissions` prod restreints vs build dev ; **Wizards** : `NotebookOrganizerDialog` (tags/doublons) branché via bouton "Tags IA" dans `home-client.tsx` — `StructuredViewsWizard` encore **orphelin** (pas de point d'entrée UI) ; **Publication web** (`note-editor-toolbar.tsx`) : deux modes — simple (copie directe) + IA (2-3 templates, reformulation adaptée au contenu, KaTeX pour équations, images incluses) — quota IA consommé uniquement sur publication IA. diff --git a/CLAUDE.md b/CLAUDE.md index 1251dfb..182a797 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,4 +1,4 @@ -# Momento Project Rules +# Memento Project Rules ## CRITICAL — DATABASE SAFETY diff --git a/DEPLOY.md b/DEPLOY.md index ab9c4c4..7801490 100644 --- a/DEPLOY.md +++ b/DEPLOY.md @@ -54,7 +54,7 @@ chown memento-deploy:memento-deploy /opt/memento ```bash su - memento-deploy cd /opt/memento -git clone https://gitea.parsanet.org/sepehr/Momento.git . +git clone https://gitea.parsanet.org/sepehr/Memento.git . git config credential.helper store # Le premier pull demandera les identifiants Gitea ``` @@ -110,7 +110,7 @@ Redemarrer Gitea. ### 2. Recuperer le token d'enregistrement -Aller sur : **gitea.parsanet.org > Momento > Settings > Actions > Runners > "New Runner"** +Aller sur : **gitea.parsanet.org > Memento > Settings > Actions > Runners > "New Runner"** Copier le token affiche. ### 3. Installer act_runner sur 192.168.1.190 @@ -179,7 +179,7 @@ systemctl status gitea-runner systemctl status gitea-runner # Doit etre "active (running)" -# Sur gitea.parsanet.org > Momento > Settings > Actions > Runners +# Sur gitea.parsanet.org > Memento > Settings > Actions > Runners # Le runner "memento-deploy" doit apparaitre avec le label "docker-host" ``` @@ -213,7 +213,7 @@ git add README.md git commit -m "test: CI/CD deploy" git push origin main -# Verifier sur gitea.parsanet.org > Momento > Actions +# Verifier sur gitea.parsanet.org > Memento > Actions # Le job doit apparaitre et se terminer en succes ``` diff --git a/GITEA-ACTIONS.md b/GITEA-ACTIONS.md index a00825e..ce09ee6 100644 --- a/GITEA-ACTIONS.md +++ b/GITEA-ACTIONS.md @@ -25,7 +25,7 @@ Serveur Docker (192.168.1.190) ## Variables (non-sensibles) -Aller sur : **`Momento → Settings → Actions → Variables`** +Aller sur : **`Memento → Settings → Actions → Variables`** | Nom | Exemple | Description | |-----|---------|-------------| @@ -59,7 +59,7 @@ Aller sur : **`Momento → Settings → Actions → Variables`** ## Secrets (sensibles) -Aller sur : **`Momento → Settings → Actions → Secrets`** +Aller sur : **`Memento → Settings → Actions → Secrets`** | Nom | Description | |-----|-------------| @@ -138,11 +138,11 @@ Ou dans l'interface admin : **Admin → Settings → Configuration Email → Res Chaque `git push` sur la branche `main` déclenche automatiquement le déploiement. ### Manuel (depuis Gitea) -`Momento → Actions → "Deploy to Production" → Run workflow → Run workflow` +`Memento → Actions → "Deploy to Production" → Run workflow → Run workflow` ### Manuel (depuis le terminal) ```bash -cd D:/dev1405/Momento +cd D:/dev1405/Memento git commit --allow-empty -m "ci: trigger deploy" git push origin main ``` @@ -167,7 +167,7 @@ git push origin main # Sur 192.168.1.190 : mkdir -p /opt/memento cd /opt/memento -git clone https://gitea.parsanet.org/sepehr/Momento.git . +git clone https://gitea.parsanet.org/sepehr/Memento.git . # Générer les secrets si pas encore configurés dans Gitea : # openssl rand -base64 32 → NEXTAUTH_SECRET diff --git a/GUIDE.en.md b/GUIDE.en.md index bdc3fed..54f17ff 100644 --- a/GUIDE.en.md +++ b/GUIDE.en.md @@ -79,7 +79,7 @@ ## Architecture ``` -Momento/ +Memento/ ├── docker-compose.yml # Multi-container orchestration ├── .env.docker.example # Docker config template ├── GUIDE.md # This guide (FR) @@ -147,8 +147,8 @@ Browser -> Next.js App Router ### Quick Setup (interactive script) ```bash -git clone https://github.com/votre-user/Momento.git -cd Momento +git clone https://github.com/votre-user/Memento.git +cd Memento # macOS / Linux ./scripts/deploy-local.sh @@ -167,8 +167,8 @@ The script will: ```bash # 1. Clone the repository -git clone https://github.com/votre-user/Momento.git -cd Momento/memento-note +git clone https://github.com/votre-user/Memento.git +cd Memento/memento-note # 2. Install dependencies npm install --legacy-peer-deps @@ -200,8 +200,8 @@ npm run dev ### Quick Setup (interactive script) ```bash -git clone https://github.com/votre-user/Momento.git -cd Momento +git clone https://github.com/votre-user/Memento.git +cd Memento # macOS / Linux ./scripts/deploy-docker.sh @@ -231,8 +231,8 @@ The script will: ```bash # 1. Clone the repository -git clone https://github.com/votre-user/Momento.git -cd Momento +git clone https://github.com/votre-user/Memento.git +cd Memento # 2. Configure the environment cp .env.docker.example .env.docker diff --git a/GUIDE.md b/GUIDE.md index 8055b08..24ee939 100644 --- a/GUIDE.md +++ b/GUIDE.md @@ -80,7 +80,7 @@ ## Architecture ``` -Momento/ +Memento/ ├── docker-compose.yml # Orchestration multi-conteneurs ├── .env.docker.example # Template config Docker ├── GUIDE.md # Ce guide (FR) @@ -148,8 +148,8 @@ Navigateur -> Next.js App Router ### Installation rapide (script interactif) ```bash -git clone https://github.com/votre-user/Momento.git -cd Momento +git clone https://github.com/votre-user/Memento.git +cd Memento # macOS / Linux ./scripts/deploy-local.sh @@ -168,8 +168,8 @@ Le script va : ```bash # 1. Cloner le depot -git clone https://github.com/votre-user/Momento.git -cd Momento/memento-note +git clone https://github.com/votre-user/Memento.git +cd Memento/memento-note # 2. Installer les dependances npm install --legacy-peer-deps @@ -201,8 +201,8 @@ npm run dev ### Installation rapide (script interactif) ```bash -git clone https://github.com/votre-user/Momento.git -cd Momento +git clone https://github.com/votre-user/Memento.git +cd Memento # macOS / Linux ./scripts/deploy-docker.sh @@ -232,8 +232,8 @@ Le script va : ```bash # 1. Cloner le depot -git clone https://github.com/votre-user/Momento.git -cd Momento +git clone https://github.com/votre-user/Memento.git +cd Memento # 2. Configurer l'environnement cp .env.docker.example .env.docker diff --git a/README.fr.md b/README.fr.md index 173e690..38fa575 100644 --- a/README.fr.md +++ b/README.fr.md @@ -50,8 +50,8 @@ Une application de prise de notes intelligente et powered by IA. Comme Google Ke Le script de deploiement interactif s'occupe de tout - configuration, build et demarrage : ```bash -git clone https://github.com/yourusername/Momento.git -cd Momento +git clone https://github.com/yourusername/Memento.git +cd Memento # macOS / Linux ./scripts/deploy-docker.sh @@ -73,8 +73,8 @@ docker compose up -d ### Developpement local ```bash -git clone https://github.com/yourusername/Momento.git -cd Momento +git clone https://github.com/yourusername/Memento.git +cd Memento # macOS / Linux ./scripts/deploy-local.sh @@ -86,7 +86,7 @@ cd Momento Ou manuellement : ```bash -cd Momento/memento-note +cd Memento/memento-note cp .env.example .env # Editer .env avec DATABASE_URL, NEXTAUTH_SECRET, ADMIN_EMAIL, etc. npm install --legacy-peer-deps @@ -170,7 +170,7 @@ Pour le guide complet d'installation, deploiement et configuration, voir **[GUID ## Structure du projet ``` -Momento/ +Memento/ ├── docker-compose.yml # Orchestration multi-conteneurs ├── .env.docker.example # Template environnement Docker ├── scripts/ # Scripts de deploiement @@ -215,8 +215,8 @@ Voir [.env.docker.example](.env.docker.example) pour la liste complete. Variable Les contributions sont bienvenues ! -- **Rapports de bugs** : [Ouvrir une issue](https://github.com/yourusername/Momento/issues) -- **Idees de fonctionnalites** : [Lancer une discussion](https://github.com/yourusername/Momento/discussions) +- **Rapports de bugs** : [Ouvrir une issue](https://github.com/yourusername/Memento/issues) +- **Idees de fonctionnalites** : [Lancer une discussion](https://github.com/yourusername/Memento/discussions) - **Pull requests** : Fork, creer une branche, et soumettre une PR --- diff --git a/README.md b/README.md index 2473b78..de5583a 100644 --- a/README.md +++ b/README.md @@ -50,8 +50,8 @@ A smart, AI-powered note-taking app. Like Google Keep, but with notebooks, seman The interactive deploy script handles everything - environment config, container build, and startup: ```bash -git clone https://github.com/yourusername/Momento.git -cd Momento +git clone https://github.com/yourusername/Memento.git +cd Memento # macOS / Linux ./scripts/deploy-docker.sh @@ -73,8 +73,8 @@ docker compose up -d ### Local Development ```bash -git clone https://github.com/yourusername/Momento.git -cd Momento +git clone https://github.com/yourusername/Memento.git +cd Memento # macOS / Linux ./scripts/deploy-local.sh @@ -86,7 +86,7 @@ cd Momento Or manually: ```bash -cd Momento/memento-note +cd Memento/memento-note cp .env.example .env # Edit .env with your DATABASE_URL, NEXTAUTH_SECRET, ADMIN_EMAIL, etc. npm install --legacy-peer-deps @@ -170,7 +170,7 @@ For the complete installation, deployment, and configuration guide, see **[GUIDE ## Project Structure ``` -Momento/ +Memento/ ├── docker-compose.yml # Multi-container orchestration ├── .env.docker.example # Docker environment template ├── scripts/ # Deployment scripts @@ -215,8 +215,8 @@ See [.env.docker.example](.env.docker.example) for the complete list. Key variab Contributions are welcome! -- **Bug reports**: [Open an issue](https://github.com/yourusername/Momento/issues) -- **Feature ideas**: [Start a discussion](https://github.com/yourusername/Momento/discussions) +- **Bug reports**: [Open an issue](https://github.com/yourusername/Memento/issues) +- **Feature ideas**: [Start a discussion](https://github.com/yourusername/Memento/discussions) - **Pull requests**: Fork, create a branch, and submit a PR --- diff --git a/_bmad-output/implementation-artifacts/spec-cross-project-audit.md b/_bmad-output/implementation-artifacts/spec-cross-project-audit.md index d5afae5..587e36d 100644 --- a/_bmad-output/implementation-artifacts/spec-cross-project-audit.md +++ b/_bmad-output/implementation-artifacts/spec-cross-project-audit.md @@ -14,7 +14,7 @@ context: ## Intent -**Problem:** The Momento workspace spans multiple deployable and reference projects (memento-note, mcp-server, extension, mobile, monitoring, CI/CD, prototypes) without a consolidated security and quality audit; several P0 issues were found (open uploads, MCP auth bypass, fail-open quotas). +**Problem:** The Memento workspace spans multiple deployable and reference projects (memento-note, mcp-server, extension, mobile, monitoring, CI/CD, prototypes) without a consolidated security and quality audit; several P0 issues were found (open uploads, MCP auth bypass, fail-open quotas). **Approach:** Deliver a prioritized cross-project audit report (bugs + improvements) and, upon approval, remediate Phase 1 P0 security items first — app uploads/auth, MCP tenant isolation, extension Store readiness — before UX/i18n/prototype parity work. diff --git a/_bmad-output/implementation-artifacts/spec-mcp-robustness.md b/_bmad-output/implementation-artifacts/spec-mcp-robustness.md index 469bd87..a60d15f 100644 --- a/_bmad-output/implementation-artifacts/spec-mcp-robustness.md +++ b/_bmad-output/implementation-artifacts/spec-mcp-robustness.md @@ -9,7 +9,7 @@ completedDate: 2026-05-24 ## Context -Momento currently uses MCP SDK v1.0.4 with a working but potentially fragile implementation. With MCP SDK v2 coming in Q1 2026, we need to: +Memento currently uses MCP SDK v1.0.4 with a working but potentially fragile implementation. With MCP SDK v2 coming in Q1 2026, we need to: 1. Make the current implementation more robust 2. Prepare for v2 migration 3. Add production-ready features diff --git a/_bmad-output/implementation-artifacts/spec-us4-db-inline-redesign.md b/_bmad-output/implementation-artifacts/spec-us4-db-inline-redesign.md index 702e745..159d182 100644 --- a/_bmad-output/implementation-artifacts/spec-us4-db-inline-redesign.md +++ b/_bmad-output/implementation-artifacts/spec-us4-db-inline-redesign.md @@ -98,7 +98,7 @@ note: > ## Design Notes -**Why reference-only attrs?** Storing note rows in TipTap HTML scales to O(notes × properties) per keystroke — unacceptable for perf. The reference pattern (`notebookId` only) is how Notion "linked database" blocks work and aligns with Momento's already-existing API layer. +**Why reference-only attrs?** Storing note rows in TipTap HTML scales to O(notes × properties) per keystroke — unacceptable for perf. The reference pattern (`notebookId` only) is how Notion "linked database" blocks work and aligns with Memento's already-existing API layer. **notebookId propagation:** The editor currently receives only `noteId`. The smallest change is to add `notebookId` as a prop to `RichTextEditor` (already used by `note-content-area.tsx`). No context change needed. diff --git a/_bmad/cis/config.yaml b/_bmad/cis/config.yaml index 847d153..9c9f010 100644 --- a/_bmad/cis/config.yaml +++ b/_bmad/cis/config.yaml @@ -7,7 +7,7 @@ visual_tools: intermediate # Core Configuration Values user_name: Devparsa -project_name: Momento +project_name: Memento communication_language: French document_output_language: English output_folder: "{project-root}/_bmad-output" diff --git a/_bmad/wds/config.yaml b/_bmad/wds/config.yaml index 12a0c17..9e77c40 100644 --- a/_bmad/wds/config.yaml +++ b/_bmad/wds/config.yaml @@ -14,7 +14,7 @@ design_experience: intermediate # Core Configuration Values user_name: Devparsa -project_name: Momento +project_name: Memento communication_language: French document_output_language: English output_folder: "{project-root}/_bmad-output" diff --git a/architectural-grid/src/components/AgentsView.tsx b/architectural-grid/src/components/AgentsView.tsx index 8dfe628..9867f92 100644 --- a/architectural-grid/src/components/AgentsView.tsx +++ b/architectural-grid/src/components/AgentsView.tsx @@ -327,7 +327,7 @@ export const AgentsView: React.FC = ({ 'Connexion SSH sans mot de passe à devSandbox', 'Gateway token (blank to generate)', 'Procédure d\'accès à openclaw', - 'Derniers commits du repo Momento' + 'Derniers commits du repo Memento' ].map((note, i) => (