@appsforgood/next-supabase-kit 0.1.3 → 0.1.5
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/CHANGELOG.md +16 -0
- package/DOGFOOD.md +15 -0
- package/LOOP_CODING.md +107 -0
- package/MAINTAINER_RELEASE.md +100 -0
- package/assistant-adapters/codex-agents.md +15 -0
- package/assistant-adapters/cursor-agent-kit.mdc +1 -0
- package/assistant-adapters/cursor-frontend.mdc +16 -0
- package/assistant-adapters/cursor-planner.mdc +14 -0
- package/assistant-adapters/cursor-security.mdc +18 -0
- package/assistant-adapters/model-selection/codex-config.example.toml +3 -0
- package/dist/index.js +976 -285
- package/dist/index.js.map +1 -1
- package/dist/studio/office/assets/office.css +79 -1
- package/dist/studio/office/assets/office.js +72 -1
- package/dist/studio/wizard/assets/wizard.css +52 -0
- package/dist/studio/wizard/assets/wizard.js +76 -5
- package/examples/next-supabase-installed/.agent-kit/manifest.json +7 -5
- package/examples/next-supabase-installed/.agent-kit/overrides.json +1 -7
- package/examples/next-supabase-installed/audit-output.json +25 -3
- package/examples/next-supabase-installed/tree.txt +1 -0
- package/package.json +8 -3
- package/research/summaries/agentic-engineering-maturity-levels.md +54 -0
- package/schemas/agentic-level.schema.json +47 -0
- package/schemas/onboarding-state.schema.json +4 -1
- package/templates/next-supabase/ASSISTANT_ADAPTERS.md +26 -2
- package/templates/next-supabase/DOCS.md +2 -0
- package/templates/next-supabase/LOOP_CODING.md +98 -0
- package/templates/next-supabase/TESTING.md +10 -0
|
@@ -79,11 +79,89 @@ body {
|
|
|
79
79
|
border: 1px solid rgba(255, 255, 255, 0.12);
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
+
.level-pill {
|
|
83
|
+
font-size: 12px;
|
|
84
|
+
padding: 6px 12px;
|
|
85
|
+
border-radius: 999px;
|
|
86
|
+
background: rgba(15, 118, 110, 0.35);
|
|
87
|
+
border: 1px solid rgba(153, 246, 228, 0.35);
|
|
88
|
+
font-variant-numeric: tabular-nums;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.iceberg-strip {
|
|
92
|
+
display: grid;
|
|
93
|
+
grid-template-columns: repeat(6, 1fr);
|
|
94
|
+
gap: 4px;
|
|
95
|
+
padding: 8px 20px 10px;
|
|
96
|
+
background: #0a1620;
|
|
97
|
+
border-bottom: 1px solid rgba(255, 255, 255, 0.06);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.iceberg-seg {
|
|
101
|
+
text-align: center;
|
|
102
|
+
font-size: 10px;
|
|
103
|
+
padding: 6px 4px;
|
|
104
|
+
border-radius: 6px;
|
|
105
|
+
border: 1px solid rgba(255, 255, 255, 0.12);
|
|
106
|
+
color: #94a3b8;
|
|
107
|
+
opacity: 0.55;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.iceberg-seg.current {
|
|
111
|
+
opacity: 1;
|
|
112
|
+
color: #ecfdf5;
|
|
113
|
+
border-color: rgba(153, 246, 228, 0.55);
|
|
114
|
+
background: rgba(15, 118, 110, 0.35);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.iceberg-seg.target {
|
|
118
|
+
opacity: 0.85;
|
|
119
|
+
border-style: dashed;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.iceberg-seg.deferred {
|
|
123
|
+
opacity: 0.35;
|
|
124
|
+
border-style: dotted;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.climb-panel {
|
|
128
|
+
margin: 0 0 12px;
|
|
129
|
+
padding: 10px;
|
|
130
|
+
border-radius: 8px;
|
|
131
|
+
background: rgba(255, 255, 255, 0.04);
|
|
132
|
+
border: 1px solid var(--line);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.climb-panel h3 {
|
|
136
|
+
margin: 0 0 8px;
|
|
137
|
+
font-size: 12px;
|
|
138
|
+
text-transform: uppercase;
|
|
139
|
+
letter-spacing: 0.04em;
|
|
140
|
+
color: var(--muted);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.climb-panel ol {
|
|
144
|
+
margin: 0 0 10px;
|
|
145
|
+
padding-left: 18px;
|
|
146
|
+
font-size: 12px;
|
|
147
|
+
color: var(--ink);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.climb-panel li {
|
|
151
|
+
margin-bottom: 6px;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.climb-refresh {
|
|
155
|
+
width: 100%;
|
|
156
|
+
font-size: 12px;
|
|
157
|
+
padding: 6px 8px;
|
|
158
|
+
}
|
|
159
|
+
|
|
82
160
|
.office-main {
|
|
83
161
|
display: grid;
|
|
84
162
|
grid-template-columns: 220px minmax(0, 1fr);
|
|
85
163
|
gap: 0;
|
|
86
|
-
min-height: calc(100vh -
|
|
164
|
+
min-height: calc(100vh - 96px);
|
|
87
165
|
}
|
|
88
166
|
|
|
89
167
|
@media (max-width: 900px) {
|
|
@@ -35,7 +35,8 @@
|
|
|
35
35
|
handoffPulse: null,
|
|
36
36
|
studioSessionId: boot.activeSessionId || "",
|
|
37
37
|
studioEvents: [],
|
|
38
|
-
speechBubbles: []
|
|
38
|
+
speechBubbles: [],
|
|
39
|
+
agenticLevel: null
|
|
39
40
|
};
|
|
40
41
|
|
|
41
42
|
const agentRuntime = {};
|
|
@@ -44,6 +45,11 @@
|
|
|
44
45
|
canvas: document.getElementById("office-floor"),
|
|
45
46
|
projectName: document.getElementById("project-name"),
|
|
46
47
|
progressPill: document.getElementById("progress-pill"),
|
|
48
|
+
levelPill: document.getElementById("level-pill"),
|
|
49
|
+
icebergStrip: document.getElementById("iceberg-strip"),
|
|
50
|
+
climbPanel: document.getElementById("climb-panel"),
|
|
51
|
+
climbList: document.getElementById("climb-list"),
|
|
52
|
+
climbRefresh: document.getElementById("climb-refresh"),
|
|
47
53
|
sessionPill: document.getElementById("session-pill"),
|
|
48
54
|
stationList: document.getElementById("station-list"),
|
|
49
55
|
status: document.getElementById("status"),
|
|
@@ -188,9 +194,11 @@
|
|
|
188
194
|
state.progress = data.progress || {};
|
|
189
195
|
state.onboarding = data.onboarding || {};
|
|
190
196
|
state.depth = data.onboarding?.depth || "undecided";
|
|
197
|
+
state.agenticLevel = data.agenticLevel || null;
|
|
191
198
|
if (Array.isArray(data.agents) && data.agents.length) state.agents = data.agents;
|
|
192
199
|
els.projectName.textContent = data.projectName || "your project";
|
|
193
200
|
updateProgressUi();
|
|
201
|
+
updateAgenticLevelUi();
|
|
194
202
|
renderStationList();
|
|
195
203
|
if (state.depth === "undecided") showDepthModal();
|
|
196
204
|
else {
|
|
@@ -334,6 +342,69 @@
|
|
|
334
342
|
if (els.progressPill) els.progressPill.textContent = pct + "% ready";
|
|
335
343
|
}
|
|
336
344
|
|
|
345
|
+
function updateAgenticLevelUi() {
|
|
346
|
+
const level = state.agenticLevel;
|
|
347
|
+
if (!level || isStudio) return;
|
|
348
|
+
const current = level.currentLevel ?? 3;
|
|
349
|
+
const target = level.targetLevel ?? 5;
|
|
350
|
+
if (els.levelPill) {
|
|
351
|
+
els.levelPill.textContent = "L" + current + " → L" + target;
|
|
352
|
+
els.levelPill.setAttribute(
|
|
353
|
+
"aria-label",
|
|
354
|
+
"Agentic engineering level " + current + ", target level " + target
|
|
355
|
+
);
|
|
356
|
+
}
|
|
357
|
+
if (els.icebergStrip) {
|
|
358
|
+
els.icebergStrip.innerHTML = [3, 4, 5, 6, 7, 8]
|
|
359
|
+
.map((n) => {
|
|
360
|
+
let cls = "iceberg-seg";
|
|
361
|
+
if (n === current) cls += " current";
|
|
362
|
+
if (n === target && n !== current) cls += " target";
|
|
363
|
+
if (n >= 7) cls += " deferred";
|
|
364
|
+
return '<span class="' + cls + '">L' + n + "</span>";
|
|
365
|
+
})
|
|
366
|
+
.join("");
|
|
367
|
+
}
|
|
368
|
+
const steps = level.climbSteps || [];
|
|
369
|
+
if (els.climbPanel && els.climbList) {
|
|
370
|
+
if (current >= target || steps.length === 0) {
|
|
371
|
+
els.climbPanel.hidden = true;
|
|
372
|
+
} else {
|
|
373
|
+
els.climbPanel.hidden = false;
|
|
374
|
+
els.climbList.innerHTML = steps
|
|
375
|
+
.slice(0, 3)
|
|
376
|
+
.map(
|
|
377
|
+
(step) =>
|
|
378
|
+
"<li><strong>L" +
|
|
379
|
+
step.level +
|
|
380
|
+
"</strong> " +
|
|
381
|
+
escapeHtml(step.label) +
|
|
382
|
+
" — " +
|
|
383
|
+
escapeHtml(step.remediation) +
|
|
384
|
+
"</li>"
|
|
385
|
+
)
|
|
386
|
+
.join("");
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
if (level.maintainerNote && els.status && !els.status.textContent) {
|
|
390
|
+
setStatus("ok", level.maintainerNote);
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
if (els.climbRefresh) {
|
|
395
|
+
els.climbRefresh.addEventListener("click", async () => {
|
|
396
|
+
try {
|
|
397
|
+
const data = await api("/api/agentic-level/refresh", { method: "POST" });
|
|
398
|
+
state.agenticLevel = data.agenticLevel;
|
|
399
|
+
state.progress = data.progress;
|
|
400
|
+
updateAgenticLevelUi();
|
|
401
|
+
setStatus("ok", "Agentic level refreshed.");
|
|
402
|
+
} catch (error) {
|
|
403
|
+
setStatus("error", error.message);
|
|
404
|
+
}
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
|
|
337
408
|
function spawnConfetti(x, y) {
|
|
338
409
|
if (state.reducedMotion) return;
|
|
339
410
|
for (let i = 0; i < 12; i += 1) {
|
|
@@ -131,6 +131,58 @@ body {
|
|
|
131
131
|
color: var(--muted);
|
|
132
132
|
}
|
|
133
133
|
|
|
134
|
+
.office-promo .btn:hover {
|
|
135
|
+
filter: brightness(1.05);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.wizard-level-pill {
|
|
139
|
+
margin-top: 8px;
|
|
140
|
+
display: inline-block;
|
|
141
|
+
font-size: 12px;
|
|
142
|
+
padding: 4px 10px;
|
|
143
|
+
border-radius: 999px;
|
|
144
|
+
background: rgba(15, 118, 110, 0.25);
|
|
145
|
+
border: 1px solid rgba(153, 246, 228, 0.35);
|
|
146
|
+
color: #99f6e4;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
.agentic-level-card {
|
|
150
|
+
margin: 12px 0 16px;
|
|
151
|
+
padding: 12px 14px;
|
|
152
|
+
border-radius: 10px;
|
|
153
|
+
border: 1px solid #d9e2ec;
|
|
154
|
+
background: #f8fafc;
|
|
155
|
+
font-size: 14px;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
.agentic-level-card .hint-inline {
|
|
159
|
+
font-size: 12px;
|
|
160
|
+
color: #64748b;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.adapter-chip {
|
|
164
|
+
margin-top: 10px;
|
|
165
|
+
padding: 8px 10px;
|
|
166
|
+
border-radius: 8px;
|
|
167
|
+
font-size: 13px;
|
|
168
|
+
border: 1px solid #d9e2ec;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.adapter-chip.ok {
|
|
172
|
+
background: #ecfdf5;
|
|
173
|
+
border-color: #6ee7b7;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
.adapter-chip.warn {
|
|
177
|
+
background: #fffbeb;
|
|
178
|
+
border-color: #fcd34d;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
.adapter-chip.error {
|
|
182
|
+
background: #fef2f2;
|
|
183
|
+
border-color: #fca5a5;
|
|
184
|
+
}
|
|
185
|
+
|
|
134
186
|
.office-promo .btn {
|
|
135
187
|
display: inline-block;
|
|
136
188
|
background: var(--accent);
|
|
@@ -14,7 +14,9 @@
|
|
|
14
14
|
designDraft: null,
|
|
15
15
|
messagingDraft: null,
|
|
16
16
|
ideSurfaces: boot.ideSurfaces || [],
|
|
17
|
-
agents: boot.agents || []
|
|
17
|
+
agents: boot.agents || [],
|
|
18
|
+
agenticLevel: null,
|
|
19
|
+
lastAdapterValidation: null
|
|
18
20
|
};
|
|
19
21
|
|
|
20
22
|
const els = {
|
|
@@ -22,6 +24,7 @@
|
|
|
22
24
|
projectName: document.getElementById("project-name"),
|
|
23
25
|
ringPct: document.getElementById("ring-pct"),
|
|
24
26
|
ring: document.getElementById("progress-ring"),
|
|
27
|
+
levelPill: document.getElementById("wizard-level-pill"),
|
|
25
28
|
sectionNav: document.getElementById("section-nav"),
|
|
26
29
|
card: document.getElementById("wizard-card"),
|
|
27
30
|
footer: document.getElementById("wizard-footer"),
|
|
@@ -83,10 +86,16 @@
|
|
|
83
86
|
state.designDraft = data.designDraft;
|
|
84
87
|
state.messagingDraft = data.messagingDraft;
|
|
85
88
|
if (Array.isArray(data.agents) && data.agents.length) state.agents = data.agents;
|
|
89
|
+
state.agenticLevel = data.agenticLevel || null;
|
|
86
90
|
els.projectName.textContent = data.projectName || "your project";
|
|
87
91
|
const pct = data.progress?.percent ?? 0;
|
|
88
92
|
els.ringPct.textContent = pct + "%";
|
|
89
93
|
els.ring.style.setProperty("--pct", String(pct));
|
|
94
|
+
if (els.levelPill && state.agenticLevel) {
|
|
95
|
+
els.levelPill.textContent =
|
|
96
|
+
"L" + state.agenticLevel.currentLevel + " → L" + state.agenticLevel.targetLevel;
|
|
97
|
+
els.levelPill.hidden = false;
|
|
98
|
+
}
|
|
90
99
|
render();
|
|
91
100
|
}
|
|
92
101
|
|
|
@@ -227,6 +236,7 @@
|
|
|
227
236
|
pills +
|
|
228
237
|
"</div>" +
|
|
229
238
|
'<p class="why" style="margin-top:20px"><strong>Choose your path</strong></p>' +
|
|
239
|
+
agenticLevelHomeBlock() +
|
|
230
240
|
'<div class="depth-grid">' +
|
|
231
241
|
depthCard("quick", "Quick (~10 min)", "IDE setup, agent briefings, and product essentials.") +
|
|
232
242
|
depthCard("standard", "Standard (~15 min)", "Quick plus visual QA tier for UI changes.") +
|
|
@@ -240,6 +250,21 @@
|
|
|
240
250
|
);
|
|
241
251
|
}
|
|
242
252
|
|
|
253
|
+
function agenticLevelHomeBlock() {
|
|
254
|
+
const level = state.agenticLevel;
|
|
255
|
+
if (!level) return "";
|
|
256
|
+
return (
|
|
257
|
+
'<div class="agentic-level-card">' +
|
|
258
|
+
"<p><strong>Agentic level</strong> L" +
|
|
259
|
+
level.currentLevel +
|
|
260
|
+
" → target L" +
|
|
261
|
+
level.targetLevel +
|
|
262
|
+
" <span class=\"hint-inline\">(setup progress is separate from audit readiness and visual QA tiers)</span></p>" +
|
|
263
|
+
(level.maintainerNote ? "<p class=\"hint\">" + escapeHtml(level.maintainerNote) + "</p>" : "") +
|
|
264
|
+
"</div>"
|
|
265
|
+
);
|
|
266
|
+
}
|
|
267
|
+
|
|
243
268
|
function depthCard(id, title, desc) {
|
|
244
269
|
const sel = state.depth === id ? " selected" : "";
|
|
245
270
|
return (
|
|
@@ -374,7 +399,9 @@
|
|
|
374
399
|
qualityTarget: () => {
|
|
375
400
|
const q = state.form.qualityTarget || "baseline-setup";
|
|
376
401
|
return (
|
|
377
|
-
'<label for="qualityTarget">
|
|
402
|
+
'<label for="qualityTarget">Audit readiness target</label>' +
|
|
403
|
+
'<p class="hint">This is your <strong>audit readiness</strong> goal (agent-kit audit), not Agentic L5/L6 or visual QA tier.</p>' +
|
|
404
|
+
'<select id="qualityTarget" name="qualityTarget">' +
|
|
378
405
|
optionQuality("baseline-setup", "baseline-setup — kit installed, filling evidence", q) +
|
|
379
406
|
optionQuality("needs-improvement", "needs-improvement — active delivery", q) +
|
|
380
407
|
optionQuality("best-practice-candidate", "best-practice-candidate — clean audit goal", q) +
|
|
@@ -394,11 +421,13 @@
|
|
|
394
421
|
"</option>"
|
|
395
422
|
)
|
|
396
423
|
.join("");
|
|
424
|
+
const chip = renderAdapterChip(state.lastAdapterValidation);
|
|
397
425
|
return (
|
|
398
426
|
'<label for="ideSurface">Primary AI coding tool</label><select id="ideSurface" name="ideSurface" required>' +
|
|
399
427
|
'<option value="">Choose your IDE…</option>' +
|
|
400
428
|
opts +
|
|
401
|
-
'</select><p class="why">We configure instructions for this path: <code id="ide-path"></code></p>'
|
|
429
|
+
'</select><p class="why">We configure instructions for this path: <code id="ide-path"></code></p>' +
|
|
430
|
+
chip
|
|
402
431
|
);
|
|
403
432
|
},
|
|
404
433
|
visualQaTier: () => {
|
|
@@ -456,9 +485,49 @@
|
|
|
456
485
|
);
|
|
457
486
|
}
|
|
458
487
|
|
|
488
|
+
function renderAdapterChip(validation) {
|
|
489
|
+
if (!validation || !validation.target) return "";
|
|
490
|
+
const kind = validation.fail > 0 ? "error" : validation.warn > 0 ? "warn" : "ok";
|
|
491
|
+
const label =
|
|
492
|
+
validation.fail > 0
|
|
493
|
+
? "Adapter validate: " + validation.fail + " fail"
|
|
494
|
+
: validation.warn > 0
|
|
495
|
+
? "Adapter validate: pass with warnings"
|
|
496
|
+
: "Adapter validate: pass";
|
|
497
|
+
return (
|
|
498
|
+
'<p class="adapter-chip ' +
|
|
499
|
+
kind +
|
|
500
|
+
'" role="status">' +
|
|
501
|
+
escapeHtml(label) +
|
|
502
|
+
" (" +
|
|
503
|
+
escapeHtml(validation.target) +
|
|
504
|
+
")</p>"
|
|
505
|
+
);
|
|
506
|
+
}
|
|
507
|
+
|
|
459
508
|
function renderComplete() {
|
|
509
|
+
const level = state.agenticLevel;
|
|
510
|
+
const climb = (level?.climbSteps || [])
|
|
511
|
+
.slice(0, 3)
|
|
512
|
+
.map((step) => "<li>" + escapeHtml(step.remediation) + "</li>")
|
|
513
|
+
.join("");
|
|
460
514
|
return (
|
|
461
|
-
'<div class="complete-icon" aria-hidden="true">✓</div><h2>Setup saved</h2
|
|
515
|
+
'<div class="complete-icon" aria-hidden="true">✓</div><h2>Setup saved</h2>' +
|
|
516
|
+
(level
|
|
517
|
+
? '<p class="why">Agentic level <strong>L' +
|
|
518
|
+
level.currentLevel +
|
|
519
|
+
"</strong> (target L" +
|
|
520
|
+
level.targetLevel +
|
|
521
|
+
").</p>"
|
|
522
|
+
: "") +
|
|
523
|
+
'<p class="why">Agents read <code>.agent-kit/project-context.md</code> and <code>.agent-kit/agent-briefs.md</code> before meaningful work.</p>' +
|
|
524
|
+
'<ol class="next-steps">' +
|
|
525
|
+
"<li>Run eval loop from <code>LOOP_CODING.md</code>: <code>npm test</code>, <code>agent-kit audit --min-readiness baseline-setup</code></li>" +
|
|
526
|
+
"<li>Validate IDE adapters: <code>agent-kit adapter validate cursor|codex|all</code></li>" +
|
|
527
|
+
"<li>Reload your IDE so it picks up council subagents and rules</li>" +
|
|
528
|
+
"<li>Return anytime with <code>agent-kit setup</code></li>" +
|
|
529
|
+
"</ol>" +
|
|
530
|
+
(climb ? '<h3>Next climb steps</h3><ol class="next-steps">' + climb + "</ol>" : "")
|
|
462
531
|
);
|
|
463
532
|
}
|
|
464
533
|
|
|
@@ -619,11 +688,13 @@
|
|
|
619
688
|
await patchState({ currentSection: step.section, currentStep: state.stepIndex });
|
|
620
689
|
}
|
|
621
690
|
if (step?.section === "ide" && fieldValue("ideSurface")) {
|
|
622
|
-
await api("/api/checklist/ide", {
|
|
691
|
+
const ideResult = await api("/api/checklist/ide", {
|
|
623
692
|
method: "POST",
|
|
624
693
|
headers: { "Content-Type": "application/json" },
|
|
625
694
|
body: JSON.stringify({ ideSurface: fieldValue("ideSurface") })
|
|
626
695
|
});
|
|
696
|
+
state.lastAdapterValidation = ideResult.adapterValidation || null;
|
|
697
|
+
state.agenticLevel = ideResult.agenticLevel || state.agenticLevel;
|
|
627
698
|
}
|
|
628
699
|
if (step?.section === "visualQa" && fieldValue("visualQaTier")) {
|
|
629
700
|
await api("/api/checklist/visual-qa", {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"packageName": "@appsforgood/next-supabase-kit",
|
|
3
|
-
"packageVersion": "0.1.
|
|
3
|
+
"packageVersion": "0.1.5",
|
|
4
4
|
"stack": "next-supabase",
|
|
5
|
-
"installedAt": "2026-06-
|
|
5
|
+
"installedAt": "2026-06-17T11:49:38.732Z",
|
|
6
6
|
"docs": [
|
|
7
7
|
"AGENTS.md",
|
|
8
8
|
"AGENT_ROSTER.md",
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
"STYLE_GUIDE.md",
|
|
20
20
|
"SECURITY.md",
|
|
21
21
|
"TESTING.md",
|
|
22
|
+
"LOOP_CODING.md",
|
|
22
23
|
"DEPLOYMENT.md",
|
|
23
24
|
"UPGRADE.md"
|
|
24
25
|
],
|
|
@@ -40,19 +41,20 @@
|
|
|
40
41
|
"templateHashes": {
|
|
41
42
|
"AGENTS.md": "c7f3e7360938a1ed804d2110e9af96e6f09d50c49138063bef0db1642ddaf84f",
|
|
42
43
|
"AGENT_ROSTER.md": "fb88198d0a5f911ec8cbaa2850c1a47e1dbd1fe2c8144f9ce633bbfc1ec414d3",
|
|
43
|
-
"ASSISTANT_ADAPTERS.md": "
|
|
44
|
+
"ASSISTANT_ADAPTERS.md": "b5fb02dbab39bab1af5122050cb86acbc726e24226e7024a3b984d5fdc12f798",
|
|
44
45
|
"COUNCIL.md": "40bec9051664c9c38b8360ee16f21b5e4716030d19c493cdec67395ab06528e1",
|
|
45
46
|
"SKILLS.md": "3c3c2eb40438a42026479dccac7bbf084ba22e2d758c425dff59385d05eae3bd",
|
|
46
47
|
"SPEC.md": "bb0406a141338b630a82026e4a2bb37f38448b3641d3b3ada62d146711a4fbfe",
|
|
47
48
|
"DECISIONS.md": "0c08d1106a40f829b197d552d0397c9bcd9af7e168a55c47ff5be033c6035ec6",
|
|
48
|
-
"DOCS.md": "
|
|
49
|
+
"DOCS.md": "da6a9006daf78bf410051153fe2838417b7f46459904582c2259ec1dba4bd29f",
|
|
49
50
|
"DESIGN.md": "70f52e539073e7c4c1d37e63c9a21672a3221d2931d3ff284058dabf60243530",
|
|
50
51
|
"MESSAGING.md": "f1f7c0f11796820b60bb44e42a65749763f7167944ba6acf092a1cf7b59e50de",
|
|
51
52
|
"MODEL_ROUTING.md": "f0ca3bd12872cd5f61ff4c6bef670249c0a0188f20c049cb0d09d84219b1839c",
|
|
52
53
|
"QUALITY_GATES.md": "df9a39ad301394f7f58bc3dd5bf52f9fafeefffdc240fb7ae6a9b6a74b8da0b5",
|
|
53
54
|
"STYLE_GUIDE.md": "dcaed2d7885e920060d74e4ba5a8d548a08a729a3efc178434a17b5a182fb628",
|
|
54
55
|
"SECURITY.md": "f046e4dc794f49700ddee4cb866e2ba1983a1b71268f2e244892d615b41714f8",
|
|
55
|
-
"TESTING.md": "
|
|
56
|
+
"TESTING.md": "2889421a1a66d5a6d910e9896a7f21fe4041aa2f6c0f52c92bac8505b66ba06a",
|
|
57
|
+
"LOOP_CODING.md": "3d4719c7fc7c2e8465ee15aec27574adbbc5207d58123ecf4f88f3942c522812",
|
|
56
58
|
"DEPLOYMENT.md": "c33d949c2b1850f8ee6c38e5ec565325c3d47f4daac13b81c75e1b35655ea174",
|
|
57
59
|
"UPGRADE.md": "d4678475458744dee7c1f23b69c04e3cf82d9e896196e62455585aaae5d3a25a"
|
|
58
60
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"summary": {
|
|
3
|
-
"pass":
|
|
4
|
-
"warn":
|
|
3
|
+
"pass": 65,
|
|
4
|
+
"warn": 5,
|
|
5
5
|
"fail": 0
|
|
6
6
|
},
|
|
7
7
|
"readiness": {
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
"summary": "Agent kit setup is valid, but project-specific evidence still needs to replace starter placeholders.",
|
|
10
10
|
"nextActions": [
|
|
11
11
|
"Answer product summary, audience, workflows, auth/tenant model, UI direction, value proposition, and quality target with agent-kit setup or by editing .agent-kit/project-context.json.",
|
|
12
|
+
"Run agent-kit init --activate cursor to generate council subagents from the roster.",
|
|
12
13
|
"Replace TBD adapter rows with date, owner, evidence, model-selection status, and known limitations for each active IDE.",
|
|
13
14
|
"Replace TBD/example rows with real project evidence, or document why an item is not applicable before claiming strong or best-practice maturity.",
|
|
14
15
|
"Add package.json with test, lint, and build scripts appropriate to the stack."
|
|
@@ -18,7 +19,7 @@
|
|
|
18
19
|
{
|
|
19
20
|
"level": "pass",
|
|
20
21
|
"area": "install",
|
|
21
|
-
"message": "Agent kit installed at version 0.1.
|
|
22
|
+
"message": "Agent kit installed at version 0.1.5."
|
|
22
23
|
},
|
|
23
24
|
{
|
|
24
25
|
"level": "pass",
|
|
@@ -95,6 +96,11 @@
|
|
|
95
96
|
"area": "templates",
|
|
96
97
|
"message": "TESTING.md matches the current bundled template."
|
|
97
98
|
},
|
|
99
|
+
{
|
|
100
|
+
"level": "pass",
|
|
101
|
+
"area": "templates",
|
|
102
|
+
"message": "LOOP_CODING.md matches the current bundled template."
|
|
103
|
+
},
|
|
98
104
|
{
|
|
99
105
|
"level": "pass",
|
|
100
106
|
"area": "templates",
|
|
@@ -185,6 +191,11 @@
|
|
|
185
191
|
"area": "agents",
|
|
186
192
|
"message": ".agent-kit/schemas/onboarding-state.schema.json is present and parseable."
|
|
187
193
|
},
|
|
194
|
+
{
|
|
195
|
+
"level": "pass",
|
|
196
|
+
"area": "agents",
|
|
197
|
+
"message": ".agent-kit/schemas/agentic-level.schema.json is present and parseable."
|
|
198
|
+
},
|
|
188
199
|
{
|
|
189
200
|
"level": "warn",
|
|
190
201
|
"area": "studio",
|
|
@@ -266,6 +277,11 @@
|
|
|
266
277
|
"area": "docs",
|
|
267
278
|
"message": "TESTING.md exists."
|
|
268
279
|
},
|
|
280
|
+
{
|
|
281
|
+
"level": "pass",
|
|
282
|
+
"area": "docs",
|
|
283
|
+
"message": "LOOP_CODING.md exists."
|
|
284
|
+
},
|
|
269
285
|
{
|
|
270
286
|
"level": "pass",
|
|
271
287
|
"area": "docs",
|
|
@@ -291,6 +307,12 @@
|
|
|
291
307
|
"area": "agents",
|
|
292
308
|
"message": "ASSISTANT_ADAPTERS.md maps the council roster to tool-specific instruction surfaces."
|
|
293
309
|
},
|
|
310
|
+
{
|
|
311
|
+
"level": "warn",
|
|
312
|
+
"area": "agents",
|
|
313
|
+
"message": "Cursor is marked Active but .cursor/agents/planner.md is missing.",
|
|
314
|
+
"remediation": "Run agent-kit init --activate cursor to generate council subagents from the roster."
|
|
315
|
+
},
|
|
294
316
|
{
|
|
295
317
|
"level": "warn",
|
|
296
318
|
"area": "models",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@appsforgood/next-supabase-kit",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
4
4
|
"description": "Open agent council, skills, prompts, checklists, and markdown templates for Next.js and Supabase projects.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"repository": {
|
|
@@ -13,7 +13,8 @@
|
|
|
13
13
|
"homepage": "https://github.com/lukey662/agentsandskills#readme",
|
|
14
14
|
"publishConfig": {
|
|
15
15
|
"access": "public",
|
|
16
|
-
"registry": "https://registry.npmjs.org"
|
|
16
|
+
"registry": "https://registry.npmjs.org",
|
|
17
|
+
"provenance": true
|
|
17
18
|
},
|
|
18
19
|
"bin": {
|
|
19
20
|
"agent-kit": "dist/index.js"
|
|
@@ -57,6 +58,8 @@
|
|
|
57
58
|
"SUPPLY_CHAIN.md",
|
|
58
59
|
"BEST_PRACTICE_EVIDENCE.md",
|
|
59
60
|
"DOGFOOD.md",
|
|
61
|
+
"LOOP_CODING.md",
|
|
62
|
+
"MAINTAINER_RELEASE.md",
|
|
60
63
|
"RESEARCH_CITATION_POLICY.md",
|
|
61
64
|
"UPGRADE.md",
|
|
62
65
|
"SECURITY.md",
|
|
@@ -85,7 +88,9 @@
|
|
|
85
88
|
"sbom:generate": "node scripts/sbom-check.mjs --output sbom.cdx.json",
|
|
86
89
|
"publish:verify": "node scripts/post-publish-verify.mjs",
|
|
87
90
|
"release:check": "node scripts/release-check.mjs",
|
|
88
|
-
"pack:check": "npm pack --dry-run"
|
|
91
|
+
"pack:check": "npm pack --dry-run",
|
|
92
|
+
"dogfood:init": "node scripts/dogfood-init.mjs",
|
|
93
|
+
"adapter:validate": "node dist/index.js adapter validate all"
|
|
89
94
|
},
|
|
90
95
|
"dependencies": {
|
|
91
96
|
"@octokit/rest": "^21.1.1",
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Agentic Engineering Maturity Levels
|
|
2
|
+
|
|
3
|
+
Generated from the Agent Kit iceberg model for setup office gamification, `LOOP_CODING.md`, and maintainer climb planning.
|
|
4
|
+
|
|
5
|
+
## Summary
|
|
6
|
+
|
|
7
|
+
Agentic engineering maturity is modeled as **levels L3–L8**. The kit **computes L3–L6** from audit, adapter, and setup signals. **L7–L8 are deferred** (never auto-awarded) because they require stronger eval gates than agent freedom.
|
|
8
|
+
|
|
9
|
+
| Level | Name | Computed? |
|
|
10
|
+
| --- | --- | --- |
|
|
11
|
+
| L3 | AI-native IDE | Yes |
|
|
12
|
+
| L4 | Rules, context, MCP contract | Yes |
|
|
13
|
+
| L5 | Subagents, skills, council specialists | Yes |
|
|
14
|
+
| L6 | Eval loops, hooks, CI gates | Yes (downstream or maintainer profile) |
|
|
15
|
+
| L7 | Overnight / unsupervised teams | No — explore only |
|
|
16
|
+
| L8 | Agents managing agents | No — lab only |
|
|
17
|
+
|
|
18
|
+
## Base levels (reference)
|
|
19
|
+
|
|
20
|
+
| Lens | Level |
|
|
21
|
+
| --- | --- |
|
|
22
|
+
| What `@appsforgood/next-supabase-kit` ships | High L4 → solid L5 |
|
|
23
|
+
| BaseRepo maintainer day-to-day (gitignored dogfood overlay) | Mid L4 |
|
|
24
|
+
| BaseRepo CI (`release:check`, `adapter:validate`, audit smokes) | Partial L6 |
|
|
25
|
+
| Fresh downstream `init` | ~L4 capability; L3 until context complete |
|
|
26
|
+
| Fresh `init --activate cursor\|codex` | L5 capability when subagents exist |
|
|
27
|
+
|
|
28
|
+
## When each level was cutting edge (approximate)
|
|
29
|
+
|
|
30
|
+
| Era | Frontier | Became baseline |
|
|
31
|
+
| --- | --- | --- |
|
|
32
|
+
| 2022–2023 | Browser chat, tab completion | Copy-paste only |
|
|
33
|
+
| 2023–2024 | Repo-aware IDE chat (L3) | Autocomplete-only |
|
|
34
|
+
| Late 2024–2025 | AGENTS.md, rules, MCP (L4) | Ad-hoc prompting |
|
|
35
|
+
| 2025–2026 | Subagents, skills, councils (L5) | Single chat for all roles |
|
|
36
|
+
| 2026 now | Eval CI, loop until green (L6) | Manual “run tests when you remember” |
|
|
37
|
+
| 2026 hype | Overnight agent teams (L7) | Not safe as default |
|
|
38
|
+
| 2026+ lab | Meta-orchestration (L8) | Not mainstream production |
|
|
39
|
+
|
|
40
|
+
## Office and wizard integration
|
|
41
|
+
|
|
42
|
+
- `agent-kit setup` computes level via `computeAgenticLevel()` and returns it on `/api/state`.
|
|
43
|
+
- Agent Office shows **Lcurrent → Ltarget**, an iceberg strip (L3–L8), and top climb steps.
|
|
44
|
+
- Setup wizard complete screen links **`LOOP_CODING.md`**, **`agent-kit adapter validate`**, and audit gates.
|
|
45
|
+
- Maintainer source repos use a **maintainer profile** (release-check + dogfood docs) for L6 signals.
|
|
46
|
+
|
|
47
|
+
## Related assets
|
|
48
|
+
|
|
49
|
+
- `LOOP_CODING.md` — kit-safe loop patterns
|
|
50
|
+
- `schemas/agentic-level.schema.json` — report shape
|
|
51
|
+
- `src/studio/agentic-level.ts` — scoring implementation
|
|
52
|
+
- `research/summaries/maturity-model-patterns.md` — QUALITY_GATES evidence tiers (separate from Agentic L3–L8)
|
|
53
|
+
|
|
54
|
+
Do not conflate **Agentic L3–L8** with **QUALITY_GATES Baseline/Strong/Best-Practice** or **visual QA baseline/strong/mature** — the setup UI labels these separately.
|