Commit Graph

224 Commits

Author SHA1 Message Date
Sven (AAMOS AI) f11cbce114 feat(ai): surfacea Gemini token-usage 2026-08-12 20:59:49 +07:00
Sven (AAMOS AI) 14a5243bb2 feat(db): gemini_usage-tabell för token-telemetri 2026-08-12 20:51:50 +07:00
Sven (AAMOS AI) 3fb4374a99 feat(ops): gemini-block i summary 2026-08-12 20:48:06 +07:00
Sven (AAMOS AI) bf04a12b89 fix(gemini): read binary response body as Buffer instead of UTF-8 string
customNodeFetch previously used res.setEncoding('utf8') and concatenated
chunks into a string. This corrupted JPEG/PNG binary data with UTF-8
replacement characters, causing Gemini to return:
  400 Unable to process input image.

Now chunks are collected as Buffers and concatenated, preserving binary
integrity when images are fetched from presigned S3 URLs before being
sent to Gemini.
2026-08-12 20:30:24 +07:00
Sven (AAMOS AI) 716e768cd0 feat(deploy): aktivera dedikerad Cibello-Gemini-nyckel + SMTP, ersätt /openclaw-referens 2026-08-12 20:07:32 +07:00
Sven (AAMOS AI) dee687c031 fix(deploy): lägg till OPS_TOKEN i SSM-sync 2026-08-12 17:37:06 +07:00
Sven (AAMOS AI) 6e2d794130 feat(storage,deploy): delad S3/mock-lagring, SSM .env-sync, Gemini readyz
- @app/storage med MockStorage + AwsStorage delas mellan API och worker

- Workerns readUrl() ger presignerad S3-URL i aws-läge (fixar mock-s3 404)

- sync-env-from-ssm.py hämtar /cibello/prod/* och skriver .env; first-deploy.sh kör det i prod

- /readyz returnerar 503 om app.aamos.healthCheck() misslyckas

- docs/SECRETS.md med rotations- och SSM-regler
2026-08-12 17:28:58 +07:00
Sven (AAMOS AI) 535e3e36e8 docs(handoff): uppdatera med kostnadsspärr och verifiering 2026-08-12 16:55:46 +07:00
Sven (AAMOS AI) 7dda0fad00 fix(gemini): budget-check före bildhämtning så spärr triggars tidigt 2026-08-12 16:30:49 +07:00
Sven (AAMOS AI) 6c581bec1a feat(cost-guard): global Gemini daily budget + EOC alarm; trial requires verified email 2026-08-12 06:43:32 +07:00
Sven (AAMOS AI) 2cd00f0106 docs(handoff): hemlighetsrotation Grupp A klar, Grupp B väntar på Johan 2026-08-12 06:21:49 +07:00
Sven (AAMOS AI) 81927b6cdc fix(db): RDS-CA i poolen (app+migrator delar TLS) 2026-08-12 06:07:07 +07:00
Sven (AAMOS AI) 983f3fb2aa fix(database): explicit RDS SSL via NODE_EXTRA_CA_CERTS 2026-08-12 04:48:42 +07:00
Sven (AAMOS AI) c5a8530fbf fix(deploy): brand-guard compat + db_reachable med RDS SSL + first-deploy SSL 2026-08-12 04:22:24 +07:00
Sven (AAMOS AI) 659d0f9290 feat(deploy): Gemini som committat prod-läge + hermetiska eval-fixtures
- config.ts: tillåt AAMOS_MODE=http|gemini i prod; mock förbjudet
- first-deploy.sh: Grind 1 accepterar gemini (kräv GEMINI_API_KEY);
  Grind 5 kör eval:scan mot gemini; Grind 8 behandlar gemini som riktig AI
- gemini.ts: stöd för data-URLer (inline base64-bilder) i fetchOneImage
- eval-fixtures: 4 lokala bilder (fridge-1, fridge-2, label-1, receipt-1)
- scan-eval.ts: läser lokala fixtures, inga externa hämtningar
- capture-eval.ts: använder lokal fixture som data-URL
2026-08-12 04:10:10 +07:00
Sven (AAMOS AI) 3259f09f7d docs: HANDOFF/deploy-state för sessionskontinuitet 2026-08-12 03:50:28 +07:00
Sven (AAMOS AI) 9a9f8a6a3c feat(worker/ai): Gemini-lärar-tier för scan/detect/allergen + shadow-capture
- Utöka GeminiAamosClient med ANALYZE_MEAL_IMAGE, READ_NUTRITION_LABEL,
  READ_EXPIRY_DATE och READ_RECEIPT (vision-prompts mot kontraktsscheman).
- Lägg till apps/worker/src/lib/shadow-capture.ts: S3/local fallback,
  imageTraining-gating, ingen PII, aldrig faila användarvägen.
- Integrera capture i scan-processorn efter lyckad runTask med consentFlags.
- Lägg till @aws-sdk/client-s3 i worker samt eval:capture-skript.
- Uppdatera eval:scan till Wikimedia Special:FilePath + redirect-following.
- Exkludera .terraform i brand-guard för att undvika false positives.
- Uppdatera gemini-test för DEDUPLICATE_INVENTORY som unsupported.
2026-08-12 02:51:05 +07:00
Sven (AAMOS AI) 515dd12cc7 infra(vpc): CIDR 10.20.0.0/16 – undvik krock med aplatform-platform-vpc
Publikt subnät 10.20.1.0/24, privata 10.20.11.0/24 + 10.20.12.0/24
2026-08-11 23:55:27 +07:00
Sven (AAMOS AI) 5b35df24a7 cibello(terraform): add lifecycle ignore_changes for placeholder SSM secrets
Prevent Terraform from overwriting externally-managed secret values
2026-08-11 23:31:43 +07:00
Sven (AAMOS AI) 99c73cada0 cibello(terraform): replace SES with Mailu DNS records
- Remove aws_ses_configuration_set, aws_ses_domain_identity, aws_ses_domain_dkim

- Remove SES verification and DKIM Route53 records

- Remove SES outputs

- Add MX, SPF, DKIM, DMARC records for cibello.app -> mail.aamos.systems

- DKIM key split into two 255-char strings per Route53 limit

No apply; plan saved as cibello.plan
2026-08-11 22:51:20 +07:00
Sven (AAMOS AI) 8168f64437 docs: add FAS 1 infrastructure plan report 2026-08-11 21:39:00 +07:00
Sven (AAMOS AI) 29637ffc89 infra: fix ses dkim records output 2026-08-11 21:37:56 +07:00
Sven (AAMOS AI) d1b1748426 infra: ignore terraform local state and provider cache 2026-08-11 21:37:32 +07:00
Sven (AAMOS AI) 562b9ab6fc infra: fix oac signing protocol and route53 record output 2026-08-11 21:37:10 +07:00
Sven (AAMOS AI) e62e63739e infra: add terraform outputs 2026-08-11 21:35:46 +07:00
Sven (AAMOS AI) ff77fe0c08 infra: add route53, ses, acm, cloudfront and dns records 2026-08-11 21:35:31 +07:00
Sven (AAMOS AI) 32d93e2a0c infra: add ssm secrets and placeholders 2026-08-11 21:34:13 +07:00
Sven (AAMOS AI) 02056b2d76 infra: add least-privilege iam role and instance profile 2026-08-11 21:33:45 +07:00
Sven (AAMOS AI) c567092180 infra: add rds and s3 resources 2026-08-11 21:33:19 +07:00
Sven (AAMOS AI) dc3c3f1847 infra: add ec2, eip, key pair and docker bootstrap 2026-08-11 21:32:20 +07:00
Sven (AAMOS AI) b408caef2a infra: add vpc, subnets, routing and security groups 2026-08-11 21:31:46 +07:00
Sven (AAMOS AI) cc948c258a infra: add aws providers and default tags 2026-08-11 21:31:02 +07:00
Sven (AAMOS AI) d3d485ffe8 test(eoc-push): rätta sökväg till brand.config.json 2026-08-11 19:20:52 +07:00
Sven (AAMOS AI) cb53784ec3 test(eoc-push): använd BRAND.name istället för hårdkodat Cibello 2026-08-11 19:19:55 +07:00
Sven (AAMOS AI) c60158801d gapfill: jordnötssmör-cellen fylld (4 recept) 2026-08-11 19:19:23 +07:00
Sven (AAMOS AI) a7b53c7ba3 gapfill(peanut): rikare middagsrätter som target 2026-08-11 19:16:39 +07:00
Sven (AAMOS AI) ac919e9425 harden(eoc-push): fånga mappningsfel så pushen aldrig kastar 2026-08-11 18:44:01 +07:00
Sven (AAMOS AI) 4adde4faff chore(ops): feedback.senaste upp till 10 for EOC-panelen 2026-08-11 18:22:07 +07:00
Sven (AAMOS AI) 90b23fcd7f fix(eoc-push): interpolera {brand} + EOC-tone i pushad wall 2026-08-11 18:21:58 +07:00
Sven (AAMOS AI) 8586ed3411 fix(compose): mappa admin-porten mot 8080 (non-root nginx) 2026-08-11 17:52:23 +07:00
Sven (AAMOS AI) c4fddf0eeb fix(docker): skriv nginx-pid till /tmp sa admin kor non-root 2026-08-11 17:52:19 +07:00
Sven (AAMOS AI) c29ab778a0 harden(docker): non-root USER i Dockerfile.admin 2026-08-11 17:29:00 +07:00
Sven (AAMOS AI) 125192f24a fix(eoc-push): mappa feedback-tidsstämpel till "skapad" per EOC-kontraktet 2026-08-11 17:27:53 +07:00
Sven (AAMOS AI) af05f084b8 feat(worker): EOC push-agent for ops summary
- Add EOC_URL + EOC_PUSH_TOKEN config
- Add pushOpsSummaryToEoc processor
- Schedule PUSH_OPS_SUMMARY_TO_EOC every 2 minutes
- Add unit tests
2026-08-11 17:03:53 +07:00
Sven (AAMOS AI) 4eddcfbefe docs: pre-launch readiness report 2026-08-11 07:40:00 +07:00
Sven (AAMOS AI) 63d83e0d7c ops(api): lägg till /ops/v1/health för EOC 2026-08-11 07:37:51 +07:00
Sven (AAMOS AI) 714d0a2e5b docs(security): genomgång av hardening-checklist inför prod 2026-08-11 07:30:50 +07:00
Sven (AAMOS AI) 8627331cc9 docs(status): uppdatera till nuläge (S1–S6, 254 recept, ops+wall, EOC) 2026-08-11 07:28:59 +07:00
Sven (AAMOS AI) 4a63c5cb67 cleanup(memory): impact läser bara egen userPreferences-rad 2026-08-11 07:28:25 +07:00
Sven (AAMOS AI) 989c242d2c gapfill: importera nollcells-recept i seed 2026-08-11 06:42:09 +07:00