fraim 2.0.165 → 2.0.167
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/ai-hub/catalog.js +20 -27
- package/dist/src/ai-hub/server.js +418 -2
- package/dist/src/ai-hub/word-sideload.js +95 -0
- package/dist/src/cli/commands/org.js +40 -0
- package/dist/src/cli/commands/test-mcp.js +171 -0
- package/dist/src/cli/fraim.js +2 -0
- package/dist/src/cli/setup/first-run.js +242 -0
- package/dist/src/cli/utils/org-publish.js +98 -0
- package/dist/src/config/ai-manager-hiring.js +121 -0
- package/dist/src/config/compat.js +16 -0
- package/dist/src/config/feature-flags.js +25 -0
- package/dist/src/config/persona-capability-bundles.js +273 -0
- package/dist/src/config/persona-hiring.js +270 -0
- package/dist/src/config/portfolio-slug-overrides.js +17 -0
- package/dist/src/config/pricing.js +37 -0
- package/dist/src/config/stripe.js +43 -0
- package/dist/src/core/config-loader.js +9 -5
- package/dist/src/core/config-writer.js +75 -0
- package/dist/src/core/fraim-config-schema.generated.js +0 -21
- package/dist/src/core/utils/job-aliases.js +47 -0
- package/dist/src/core/utils/local-registry-resolver.js +8 -1
- package/dist/src/core/utils/workflow-parser.js +174 -0
- package/index.js +1 -1
- package/package.json +5 -1
- package/public/ai-hub/index.html +81 -0
- package/public/ai-hub/powerpoint-taskpane/index.html +236 -236
- package/public/ai-hub/powerpoint-taskpane/manifest.xml +29 -29
- package/public/ai-hub/review.css +13 -0
- package/public/ai-hub/script.js +414 -4
- package/public/ai-hub/styles.css +56 -0
- package/public/first-run/styles.css +73 -73
- package/public/portfolio/ashley.html +523 -0
- package/public/portfolio/auditya.html +83 -0
- package/public/portfolio/banke.html +83 -0
- package/public/portfolio/beza.html +659 -0
- package/public/portfolio/careena.html +632 -0
- package/public/portfolio/casey.html +568 -0
- package/public/portfolio/celia.html +490 -0
- package/public/portfolio/deidre.html +642 -0
- package/public/portfolio/gautam.html +597 -0
- package/public/portfolio/hari.html +469 -0
- package/public/portfolio/huxley.html +1354 -0
- package/public/portfolio/index.html +741 -0
- package/public/portfolio/maestro.html +518 -0
- package/public/portfolio/mandy.html +590 -0
- package/public/portfolio/mona.html +597 -0
- package/public/portfolio/pam.html +887 -0
- package/public/portfolio/procella.html +107 -0
- package/public/portfolio/qasm.html +569 -0
- package/public/portfolio/ricardo.html +489 -0
- package/public/portfolio/sade.html +560 -0
- package/public/portfolio/sam.html +654 -0
- package/public/portfolio/sechar.html +580 -0
- package/public/portfolio/sreya.html +599 -0
- package/public/portfolio/swen.html +601 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en" data-theme="light">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<title>BANKe - AI Banking KYC Employee - FRAIM Portfolio</title>
|
|
7
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
8
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
9
|
+
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=JetBrains+Mono:wght@500;700&display=swap" rel="stylesheet">
|
|
10
|
+
<style>
|
|
11
|
+
:root { --accent:#0f766e; --accent-2:#2563eb; --text:#0f172a; --muted:#64748b; --bg:#f8fafc; --surface:#fff; --surface-2:#eef6ff; --border:#dbeafe; --shadow:0 12px 36px rgba(15,23,42,.12); }
|
|
12
|
+
[data-theme="dark"] { --text:#e5e7eb; --muted:#94a3b8; --bg:#08111f; --surface:#0f1f33; --surface-2:#132942; --border:#244766; --shadow:0 12px 36px rgba(0,0,0,.38); }
|
|
13
|
+
* { box-sizing:border-box; margin:0; padding:0; }
|
|
14
|
+
body { font-family:Inter,sans-serif; background:var(--bg); color:var(--text); min-height:100vh; }
|
|
15
|
+
.site-header { position:sticky; top:0; z-index:10; display:flex; justify-content:space-between; align-items:center; padding:14px 32px; background:var(--surface); border-bottom:1px solid var(--border); }
|
|
16
|
+
.brand { display:flex; align-items:center; gap:10px; color:var(--text); text-decoration:none; font-weight:800; }
|
|
17
|
+
.brand-logo { width:32px; height:32px; border-radius:8px; display:grid; place-items:center; color:#fff; background:linear-gradient(135deg,var(--accent),var(--accent-2)); }
|
|
18
|
+
.theme-btn { background:var(--surface-2); color:var(--muted); border:1px solid var(--border); border-radius:8px; padding:7px 10px; cursor:pointer; }
|
|
19
|
+
.hero { max-width:960px; margin:56px auto 0; padding:0 24px; text-align:center; }
|
|
20
|
+
.avatar { width:96px; height:96px; margin:0 auto 22px; border-radius:50%; display:grid; place-items:center; color:#fff; font:800 38px/1 JetBrains Mono,monospace; background:linear-gradient(135deg,var(--accent),var(--accent-2)); box-shadow:0 0 0 8px var(--surface-2); }
|
|
21
|
+
.chip { display:inline-block; color:var(--accent); background:var(--surface-2); border:1px solid var(--border); border-radius:999px; padding:5px 14px; font-size:12px; font-weight:800; letter-spacing:.04em; text-transform:uppercase; }
|
|
22
|
+
h1 { margin:18px auto 14px; font-size:clamp(34px,5vw,56px); line-height:1.05; letter-spacing:-1px; max-width:760px; }
|
|
23
|
+
h1 span { color:var(--accent); }
|
|
24
|
+
.hero p { color:var(--muted); font-size:17px; line-height:1.7; max-width:680px; margin:0 auto; }
|
|
25
|
+
.section { max-width:980px; margin:56px auto 80px; padding:0 24px; display:grid; gap:18px; }
|
|
26
|
+
.card { background:var(--surface); border:1px solid var(--border); border-radius:14px; box-shadow:var(--shadow); overflow:hidden; }
|
|
27
|
+
.card-head { padding:22px 24px; display:flex; gap:16px; align-items:flex-start; cursor:pointer; }
|
|
28
|
+
.num { width:40px; height:40px; border-radius:10px; display:grid; place-items:center; color:#fff; background:linear-gradient(135deg,var(--accent),var(--accent-2)); font-weight:800; }
|
|
29
|
+
.meta { flex:1; min-width:0; }
|
|
30
|
+
.tag { color:var(--accent); font-size:11px; font-weight:800; letter-spacing:.08em; text-transform:uppercase; margin-bottom:6px; }
|
|
31
|
+
.title { font-size:19px; font-weight:800; margin-bottom:5px; }
|
|
32
|
+
.sub { color:var(--muted); font-size:13px; line-height:1.5; }
|
|
33
|
+
.body { display:none; border-top:1px solid var(--border); padding:24px; }
|
|
34
|
+
.card.open .body { display:block; }
|
|
35
|
+
.grid { display:grid; grid-template-columns:repeat(3,1fr); gap:14px; margin-bottom:20px; }
|
|
36
|
+
.box { background:var(--surface-2); border-radius:10px; padding:14px; }
|
|
37
|
+
.box b { display:block; color:var(--accent); font-size:11px; letter-spacing:.08em; text-transform:uppercase; margin-bottom:6px; }
|
|
38
|
+
.box span { color:var(--muted); font-size:13px; line-height:1.55; }
|
|
39
|
+
table { width:100%; border-collapse:collapse; background:var(--surface-2); border-radius:10px; overflow:hidden; }
|
|
40
|
+
th,td { text-align:left; padding:11px 12px; border-bottom:1px solid var(--border); font-size:12px; vertical-align:top; }
|
|
41
|
+
th { color:var(--accent); font-size:11px; text-transform:uppercase; letter-spacing:.06em; }
|
|
42
|
+
.mono { font-family:JetBrains Mono,monospace; font-size:12px; }
|
|
43
|
+
@media (max-width:720px) { .site-header { padding:12px 16px; } .grid { grid-template-columns:1fr; } }
|
|
44
|
+
</style>
|
|
45
|
+
</head>
|
|
46
|
+
<body>
|
|
47
|
+
<header class="site-header">
|
|
48
|
+
<a class="brand" href="/portfolio/"><div class="brand-logo">F</div><span>FRAIM</span></a>
|
|
49
|
+
<button class="theme-btn" onclick="toggleTheme()" title="Toggle dark mode">Theme</button>
|
|
50
|
+
</header>
|
|
51
|
+
<section class="hero">
|
|
52
|
+
<div class="avatar"><img src="https://api.dicebear.com/9.x/notionists/svg?seed=BANKe-banking-kyc&backgroundColor=ccfbf1&radius=50" width="96" height="96" alt="BANKe banking KYC avatar" style="border-radius:50%;"></div>
|
|
53
|
+
<div class="chip">AI Banking KYC Employee</div>
|
|
54
|
+
<h1>BANKe turns KYC work into <span>auditable evidence</span>.</h1>
|
|
55
|
+
<p>BANKe reviews consent-backed banking cases, records source evidence, makes a bounded KYC decision, and leaves receipts that a separate auditor can inspect later.</p>
|
|
56
|
+
</section>
|
|
57
|
+
<main class="section">
|
|
58
|
+
<article class="card open">
|
|
59
|
+
<div class="card-head" onclick="toggleCard(this)"><div class="num">1</div><div class="meta"><div class="tag">Banking KYC</div><div class="title">Consent-backed applicant review</div><div class="sub">Account aggregator case review with redacted applicant data and explicit consent scope.</div></div></div>
|
|
60
|
+
<div class="body">
|
|
61
|
+
<div class="grid"><div class="box"><b>Problem</b><span>A banking team needs to prove why a KYC case was approved without exposing raw PII.</span></div><div class="box"><b>Work</b><span>BANKe collects identity, consent, account ownership, sanctions, and velocity checks into one normalized bundle.</span></div><div class="box"><b>Outcome</b><span>The decision cites evidence ids and produces a receipt that AUDITya can audit later.</span></div></div>
|
|
62
|
+
<table><tr><th>Evidence id</th><th>Check</th><th>Result</th><th>Artifact</th></tr><tr><td class="mono">kyc-e-001</td><td>Consent scope</td><td>Pass</td><td class="mono">docs/banking/{case-id}/{case-id}-{date}-kyc-review.docx</td></tr><tr><td class="mono">kyc-e-003</td><td>Account ownership</td><td>Pass</td><td class="mono">docs/banking/{case-id}/{case-id}-{date}-kyc-review.docx</td></tr><tr><td class="mono">kyc-e-006</td><td>Velocity risk</td><td>Observation</td><td class="mono">docs/banking/{case-id}/{case-id}-{date}-kyc-review.docx</td></tr></table>
|
|
63
|
+
</div>
|
|
64
|
+
</article>
|
|
65
|
+
<article class="card">
|
|
66
|
+
<div class="card-head" onclick="toggleCard(this)"><div class="num">2</div><div class="meta"><div class="tag">Decision receipt</div><div class="title">Evidence first, decision second</div><div class="sub">Every approval reason points to an evidence id and source artifact.</div></div></div>
|
|
67
|
+
<div class="body">
|
|
68
|
+
<table><tr><th>Decision reason</th><th>Evidence</th><th>Review boundary</th></tr><tr><td>Applicant identity is consistent with consent artifact.</td><td class="mono">kyc-e-001, kyc-e-002</td><td>Source mode recorded per evidence item.</td></tr><tr><td>Bank account ownership matches the applicant.</td><td class="mono">kyc-e-003</td><td>Redacted account hash retained.</td></tr><tr><td>No sanctions or PEP hit found.</td><td class="mono">kyc-e-004</td><td>Provider or sandbox source recorded in the receipt.</td></tr></table>
|
|
69
|
+
</div>
|
|
70
|
+
</article>
|
|
71
|
+
<article class="card">
|
|
72
|
+
<div class="card-head" onclick="toggleCard(this)"><div class="num">3</div><div class="meta"><div class="tag">Audit handoff</div><div class="title">Stable artifact paths for future review</div><div class="sub">The KYC folder is designed to be reused by the audit job without rewriting source evidence.</div></div></div>
|
|
73
|
+
<div class="body">
|
|
74
|
+
<table><tr><th>Path</th><th>Purpose</th></tr><tr><td class="mono">docs/banking/{case-id}/{case-id}-{date}-kyc-review.docx</td><td>Human-readable case context, evidence table, decision, receipt, and audit handoff.</td></tr><tr><td class="mono">docs/banking/{case-id}/{case-id}-{date}-audit-report.docx</td><td>AUDITya's future review artifact points back to this same pack.</td></tr></table>
|
|
75
|
+
</div>
|
|
76
|
+
</article>
|
|
77
|
+
</main>
|
|
78
|
+
<script>
|
|
79
|
+
function toggleTheme(){const html=document.documentElement;html.setAttribute('data-theme',html.getAttribute('data-theme')==='dark'?'light':'dark');}
|
|
80
|
+
function toggleCard(header){header.closest('.card').classList.toggle('open');}
|
|
81
|
+
</script>
|
|
82
|
+
</body>
|
|
83
|
+
</html>
|