holo-codex 0.1.0
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/.agents/plugins/marketplace.json +20 -0
- package/CONTRIBUTING.md +54 -0
- package/LICENSE +21 -0
- package/README.md +215 -0
- package/README.zh-CN.md +215 -0
- package/SECURITY.md +39 -0
- package/assets/brand/README.md +35 -0
- package/assets/brand/holo-codex-icon.svg +28 -0
- package/assets/brand/holo-codex-lockup.svg +49 -0
- package/assets/brand/holo-codex-mark.svg +33 -0
- package/assets/brand/holo-codex-plugin-card.png +0 -0
- package/assets/brand/holo-codex-plugin-card.svg +81 -0
- package/assets/brand/holo-codex-readme-hero.png +0 -0
- package/assets/brand/holo-codex-readme-hero.svg +140 -0
- package/assets/brand/holo-codex-social-preview.png +0 -0
- package/assets/brand/holo-codex-social-preview.svg +130 -0
- package/assets/brand/holo-codex-wordmark-options.svg +52 -0
- package/docs/checklists/agent-loop-first-delivery-audit.md +129 -0
- package/docs/examples/generic-loop-repo-hygiene.md +168 -0
- package/docs/install.md +190 -0
- package/docs/local-release-readiness.md +206 -0
- package/docs/release-checklist.md +144 -0
- package/docs/self-bootstrap.md +150 -0
- package/docs/trust-and-safety.md +45 -0
- package/package.json +83 -0
- package/plugins/autonomous-pr-loop/.codex-plugin/plugin.json +17 -0
- package/plugins/autonomous-pr-loop/.mcp.json +13 -0
- package/plugins/autonomous-pr-loop/bin/agent-loop.mjs +31 -0
- package/plugins/autonomous-pr-loop/core/artifacts.ts +164 -0
- package/plugins/autonomous-pr-loop/core/autonomy-policy.ts +206 -0
- package/plugins/autonomous-pr-loop/core/ci.ts +131 -0
- package/plugins/autonomous-pr-loop/core/cli-i18n.ts +123 -0
- package/plugins/autonomous-pr-loop/core/cli.ts +1413 -0
- package/plugins/autonomous-pr-loop/core/command-runner.ts +446 -0
- package/plugins/autonomous-pr-loop/core/command.ts +47 -0
- package/plugins/autonomous-pr-loop/core/config-editor.ts +140 -0
- package/plugins/autonomous-pr-loop/core/config.ts +293 -0
- package/plugins/autonomous-pr-loop/core/controller-host.ts +19 -0
- package/plugins/autonomous-pr-loop/core/dashboard-server.ts +536 -0
- package/plugins/autonomous-pr-loop/core/delivery-work-item.ts +217 -0
- package/plugins/autonomous-pr-loop/core/doctor.ts +335 -0
- package/plugins/autonomous-pr-loop/core/errors.ts +82 -0
- package/plugins/autonomous-pr-loop/core/gate-recovery.ts +176 -0
- package/plugins/autonomous-pr-loop/core/gates.ts +26 -0
- package/plugins/autonomous-pr-loop/core/generic-lifecycle.ts +399 -0
- package/plugins/autonomous-pr-loop/core/git.ts +213 -0
- package/plugins/autonomous-pr-loop/core/github.ts +269 -0
- package/plugins/autonomous-pr-loop/core/gitnexus.ts +90 -0
- package/plugins/autonomous-pr-loop/core/happy.ts +42 -0
- package/plugins/autonomous-pr-loop/core/hook-capture.ts +115 -0
- package/plugins/autonomous-pr-loop/core/hook-events.ts +22 -0
- package/plugins/autonomous-pr-loop/core/hook-installation.ts +85 -0
- package/plugins/autonomous-pr-loop/core/hook-observer.ts +84 -0
- package/plugins/autonomous-pr-loop/core/hook-policy.ts +423 -0
- package/plugins/autonomous-pr-loop/core/hook-router.ts +452 -0
- package/plugins/autonomous-pr-loop/core/index.ts +32 -0
- package/plugins/autonomous-pr-loop/core/local-install.ts +778 -0
- package/plugins/autonomous-pr-loop/core/locale.ts +60 -0
- package/plugins/autonomous-pr-loop/core/loop-shapes.ts +190 -0
- package/plugins/autonomous-pr-loop/core/mcp-controller.ts +1479 -0
- package/plugins/autonomous-pr-loop/core/notification-feed.ts +263 -0
- package/plugins/autonomous-pr-loop/core/plan-parser.ts +206 -0
- package/plugins/autonomous-pr-loop/core/plugin-paths.ts +32 -0
- package/plugins/autonomous-pr-loop/core/policy.ts +65 -0
- package/plugins/autonomous-pr-loop/core/pr-lifecycle.ts +464 -0
- package/plugins/autonomous-pr-loop/core/pr-selector.ts +284 -0
- package/plugins/autonomous-pr-loop/core/profiles.ts +439 -0
- package/plugins/autonomous-pr-loop/core/redaction.ts +17 -0
- package/plugins/autonomous-pr-loop/core/repo-root.ts +22 -0
- package/plugins/autonomous-pr-loop/core/review-comments.ts +77 -0
- package/plugins/autonomous-pr-loop/core/scope-guard.ts +179 -0
- package/plugins/autonomous-pr-loop/core/state-machine.ts +828 -0
- package/plugins/autonomous-pr-loop/core/state-types.ts +130 -0
- package/plugins/autonomous-pr-loop/core/storage.ts +2527 -0
- package/plugins/autonomous-pr-loop/core/types.ts +567 -0
- package/plugins/autonomous-pr-loop/core/worker-events.ts +412 -0
- package/plugins/autonomous-pr-loop/core/worker-policy.ts +72 -0
- package/plugins/autonomous-pr-loop/core/worker-prompts.ts +182 -0
- package/plugins/autonomous-pr-loop/core/worker.ts +809 -0
- package/plugins/autonomous-pr-loop/core/workflow-board.ts +1515 -0
- package/plugins/autonomous-pr-loop/hooks/dist/permission-request.js +2462 -0
- package/plugins/autonomous-pr-loop/hooks/dist/post-compact.js +2462 -0
- package/plugins/autonomous-pr-loop/hooks/dist/post-tool-use.js +2462 -0
- package/plugins/autonomous-pr-loop/hooks/dist/pre-compact.js +2462 -0
- package/plugins/autonomous-pr-loop/hooks/dist/pre-tool-use.js +3460 -0
- package/plugins/autonomous-pr-loop/hooks/dist/session-start.js +2462 -0
- package/plugins/autonomous-pr-loop/hooks/dist/stop.js +2462 -0
- package/plugins/autonomous-pr-loop/hooks/dist/user-prompt-submit.js +2462 -0
- package/plugins/autonomous-pr-loop/hooks/hooks.json +106 -0
- package/plugins/autonomous-pr-loop/hooks/observe-runner.ts +25 -0
- package/plugins/autonomous-pr-loop/hooks/permission-request.ts +4 -0
- package/plugins/autonomous-pr-loop/hooks/post-compact.ts +4 -0
- package/plugins/autonomous-pr-loop/hooks/post-tool-use.ts +4 -0
- package/plugins/autonomous-pr-loop/hooks/pre-compact.ts +4 -0
- package/plugins/autonomous-pr-loop/hooks/pre-tool-use.ts +44 -0
- package/plugins/autonomous-pr-loop/hooks/session-start.ts +4 -0
- package/plugins/autonomous-pr-loop/hooks/stop.ts +4 -0
- package/plugins/autonomous-pr-loop/hooks/user-prompt-submit.ts +4 -0
- package/plugins/autonomous-pr-loop/mcp-server/src/index.ts +87 -0
- package/plugins/autonomous-pr-loop/mcp-server/src/tools.ts +205 -0
- package/plugins/autonomous-pr-loop/package.json +9 -0
- package/plugins/autonomous-pr-loop/schemas/config.schema.json +74 -0
- package/plugins/autonomous-pr-loop/schemas/marketplace.schema.json +46 -0
- package/plugins/autonomous-pr-loop/schemas/plugin.schema.json +32 -0
- package/plugins/autonomous-pr-loop/schemas/state.schema.json +19 -0
- package/plugins/autonomous-pr-loop/schemas/worker-event.schema.json +19 -0
- package/plugins/autonomous-pr-loop/schemas/worker-result.schema.json +58 -0
- package/plugins/autonomous-pr-loop/scripts/agent-loop.ts +44 -0
- package/plugins/autonomous-pr-loop/skills/autonomous-pr-loop/SKILL.md +26 -0
- package/plugins/autonomous-pr-loop/skills/autonomous-pr-loop/agents/openai.yaml +6 -0
- package/plugins/autonomous-pr-loop/ui/index.html +26 -0
- package/plugins/autonomous-pr-loop/ui/public/favicon.svg +7 -0
- package/plugins/autonomous-pr-loop/ui/src/api.ts +639 -0
- package/plugins/autonomous-pr-loop/ui/src/app.tsx +238 -0
- package/plugins/autonomous-pr-loop/ui/src/components/ActivityBadge.tsx +31 -0
- package/plugins/autonomous-pr-loop/ui/src/components/BrandMark.tsx +36 -0
- package/plugins/autonomous-pr-loop/ui/src/components/Collapsible.tsx +6 -0
- package/plugins/autonomous-pr-loop/ui/src/components/CommandPreview.tsx +15 -0
- package/plugins/autonomous-pr-loop/ui/src/components/ConfigEditor.tsx +389 -0
- package/plugins/autonomous-pr-loop/ui/src/components/EmptyState.tsx +10 -0
- package/plugins/autonomous-pr-loop/ui/src/components/ErrorState.tsx +12 -0
- package/plugins/autonomous-pr-loop/ui/src/components/List.tsx +7 -0
- package/plugins/autonomous-pr-loop/ui/src/components/MetricRow.tsx +6 -0
- package/plugins/autonomous-pr-loop/ui/src/components/ResponsiveTable.tsx +65 -0
- package/plugins/autonomous-pr-loop/ui/src/components/RiskBadge.tsx +10 -0
- package/plugins/autonomous-pr-loop/ui/src/components/StatusBadge.tsx +29 -0
- package/plugins/autonomous-pr-loop/ui/src/components/TopMetric.tsx +10 -0
- package/plugins/autonomous-pr-loop/ui/src/fixtures.ts +1152 -0
- package/plugins/autonomous-pr-loop/ui/src/i18n.ts +1105 -0
- package/plugins/autonomous-pr-loop/ui/src/main.tsx +14 -0
- package/plugins/autonomous-pr-loop/ui/src/pages/CommandCenter.tsx +470 -0
- package/plugins/autonomous-pr-loop/ui/src/pages/CommandCenterParts.tsx +276 -0
- package/plugins/autonomous-pr-loop/ui/src/pages/agent-timeline/AgentTimelineView.tsx +73 -0
- package/plugins/autonomous-pr-loop/ui/src/pages/artifact-viewer/ArtifactViewer.tsx +44 -0
- package/plugins/autonomous-pr-loop/ui/src/pages/dry-run-preview/DryRunPreview.tsx +66 -0
- package/plugins/autonomous-pr-loop/ui/src/pages/event-ledger/EventLedger.tsx +17 -0
- package/plugins/autonomous-pr-loop/ui/src/pages/gate-center/GateCenter.tsx +34 -0
- package/plugins/autonomous-pr-loop/ui/src/pages/mission-control/MissionControl.tsx +104 -0
- package/plugins/autonomous-pr-loop/ui/src/pages/mission-control/WorkflowBoard.tsx +577 -0
- package/plugins/autonomous-pr-loop/ui/src/pages/notifications/NotificationsView.tsx +30 -0
- package/plugins/autonomous-pr-loop/ui/src/pages/plan-navigator/PlanNavigator.tsx +19 -0
- package/plugins/autonomous-pr-loop/ui/src/pages/policy-config/PolicyConfig.tsx +22 -0
- package/plugins/autonomous-pr-loop/ui/src/pages/pr-inbox/PrInbox.tsx +26 -0
- package/plugins/autonomous-pr-loop/ui/src/pages/recovery-center/RecoveryCenter.tsx +125 -0
- package/plugins/autonomous-pr-loop/ui/src/pages/scope-guard/ScopeGuard.tsx +16 -0
- package/plugins/autonomous-pr-loop/ui/src/pages/worker-runs/WorkerRuns.tsx +39 -0
- package/plugins/autonomous-pr-loop/ui/src/styles.css +2673 -0
- package/plugins/autonomous-pr-loop/ui/src/theme.ts +57 -0
- package/tsconfig.json +18 -0
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">HOLO-Codex mark</title>
|
|
3
|
+
<desc id="desc">A terminal prompt glyph inside a human-on-loop control ring.</desc>
|
|
4
|
+
<defs>
|
|
5
|
+
<style>
|
|
6
|
+
.ink { stroke: #111827; }
|
|
7
|
+
.gate { fill: #f59e0b; }
|
|
8
|
+
</style>
|
|
9
|
+
</defs>
|
|
10
|
+
<path
|
|
11
|
+
class="ink"
|
|
12
|
+
d="M111.3 52.6A49 49 0 1 1 84 19.2"
|
|
13
|
+
fill="none"
|
|
14
|
+
stroke-width="8"
|
|
15
|
+
stroke-linecap="round"
|
|
16
|
+
/>
|
|
17
|
+
<circle class="gate" cx="98.6" cy="29.4" r="6.5" />
|
|
18
|
+
<path
|
|
19
|
+
class="ink"
|
|
20
|
+
d="M41 48L62 64L41 80"
|
|
21
|
+
fill="none"
|
|
22
|
+
stroke-width="8"
|
|
23
|
+
stroke-linecap="round"
|
|
24
|
+
stroke-linejoin="round"
|
|
25
|
+
/>
|
|
26
|
+
<path
|
|
27
|
+
class="ink"
|
|
28
|
+
d="M70 81H91"
|
|
29
|
+
fill="none"
|
|
30
|
+
stroke-width="8"
|
|
31
|
+
stroke-linecap="round"
|
|
32
|
+
/>
|
|
33
|
+
</svg>
|
|
Binary file
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 540" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">HOLO-Codex plugin card</title>
|
|
3
|
+
<desc id="desc">Compact plugin marketplace card for HOLO-Codex.</desc>
|
|
4
|
+
<defs>
|
|
5
|
+
<linearGradient id="surface" x1="0" x2="1" y1="0" y2="1">
|
|
6
|
+
<stop offset="0" stop-color="#ffffff" />
|
|
7
|
+
<stop offset="1" stop-color="#f8fafc" />
|
|
8
|
+
</linearGradient>
|
|
9
|
+
<filter id="shadow" x="-10%" y="-20%" width="120%" height="140%">
|
|
10
|
+
<feDropShadow dx="0" dy="16" stdDeviation="22" flood-color="#0f172a" flood-opacity="0.12" />
|
|
11
|
+
</filter>
|
|
12
|
+
<style>
|
|
13
|
+
.ink { fill: #111827; }
|
|
14
|
+
.muted { fill: #475569; }
|
|
15
|
+
.accent { fill: #f59e0b; }
|
|
16
|
+
.line { stroke: #dbe4ee; }
|
|
17
|
+
.small {
|
|
18
|
+
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
19
|
+
font-size: 24px;
|
|
20
|
+
font-weight: 620;
|
|
21
|
+
fill: #475569;
|
|
22
|
+
}
|
|
23
|
+
.tag {
|
|
24
|
+
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
25
|
+
font-size: 20px;
|
|
26
|
+
font-weight: 650;
|
|
27
|
+
fill: #334155;
|
|
28
|
+
}
|
|
29
|
+
</style>
|
|
30
|
+
</defs>
|
|
31
|
+
|
|
32
|
+
<rect width="960" height="540" rx="0" fill="#eef3f8" />
|
|
33
|
+
<rect x="74" y="70" width="812" height="400" rx="38" fill="url(#surface)" filter="url(#shadow)" />
|
|
34
|
+
|
|
35
|
+
<g transform="translate(128 126)">
|
|
36
|
+
<rect x="0" y="0" width="132" height="132" rx="32" fill="#f8fafc" stroke="#e2e8f0" />
|
|
37
|
+
<g transform="translate(2 2)">
|
|
38
|
+
<path d="M111.3 52.6A49 49 0 1 1 84 19.2" fill="none" stroke="#111827" stroke-width="8" stroke-linecap="round" />
|
|
39
|
+
<circle cx="98.6" cy="29.4" r="6.5" fill="#f59e0b" />
|
|
40
|
+
<path d="M41 48L62 64L41 80" fill="none" stroke="#111827" stroke-width="8" stroke-linecap="round" stroke-linejoin="round" />
|
|
41
|
+
<path d="M70 81H91" fill="none" stroke="#111827" stroke-width="8" stroke-linecap="round" />
|
|
42
|
+
</g>
|
|
43
|
+
</g>
|
|
44
|
+
|
|
45
|
+
<g transform="translate(304 144)">
|
|
46
|
+
<text
|
|
47
|
+
x="0"
|
|
48
|
+
y="58"
|
|
49
|
+
class="ink"
|
|
50
|
+
font-family="'SF Pro Display', 'OpenAI Sans', Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"
|
|
51
|
+
font-size="64"
|
|
52
|
+
letter-spacing="-0.2"
|
|
53
|
+
><tspan font-weight="740">HOLO</tspan><tspan font-weight="570">_Codex</tspan></text>
|
|
54
|
+
<text
|
|
55
|
+
x="3"
|
|
56
|
+
y="102"
|
|
57
|
+
class="muted"
|
|
58
|
+
font-family="'SF Pro Text', Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"
|
|
59
|
+
font-size="24"
|
|
60
|
+
>Human On Loop Codex</text>
|
|
61
|
+
</g>
|
|
62
|
+
|
|
63
|
+
<g transform="translate(128 318)">
|
|
64
|
+
<rect x="0" y="0" width="178" height="50" rx="25" fill="#f8fafc" stroke="#dbe4ee" />
|
|
65
|
+
<circle cx="28" cy="25" r="7" fill="#22c55e" />
|
|
66
|
+
<text x="50" y="32" class="tag">local-first</text>
|
|
67
|
+
|
|
68
|
+
<rect x="202" y="0" width="218" height="50" rx="25" fill="#fff7ed" stroke="#fed7aa" />
|
|
69
|
+
<circle cx="230" cy="25" r="7" fill="#f59e0b" />
|
|
70
|
+
<text x="252" y="32" class="tag">human-gated</text>
|
|
71
|
+
|
|
72
|
+
<rect x="444" y="0" width="218" height="50" rx="25" fill="#eff6ff" stroke="#bfdbfe" />
|
|
73
|
+
<circle cx="472" cy="25" r="7" fill="#3b82f6" />
|
|
74
|
+
<text x="494" y="32" class="tag">review evidence</text>
|
|
75
|
+
</g>
|
|
76
|
+
|
|
77
|
+
<g transform="translate(128 402)">
|
|
78
|
+
<path d="M0 0H704" class="line" stroke-width="1.5" />
|
|
79
|
+
<text x="0" y="42" class="small">Observable PR delivery for local Codex agent loops.</text>
|
|
80
|
+
</g>
|
|
81
|
+
</svg>
|
|
Binary file
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1600 680" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">HOLO-Codex README hero</title>
|
|
3
|
+
<desc id="desc">README hero banner showing the HOLO-Codex human-on-loop PR delivery workflow.</desc>
|
|
4
|
+
<defs>
|
|
5
|
+
<linearGradient id="surface" x1="0" x2="1" y1="0" y2="1">
|
|
6
|
+
<stop offset="0" stop-color="#ffffff" />
|
|
7
|
+
<stop offset="1" stop-color="#f8fafc" />
|
|
8
|
+
</linearGradient>
|
|
9
|
+
<filter id="soft-shadow" x="-8%" y="-18%" width="116%" height="136%">
|
|
10
|
+
<feDropShadow dx="0" dy="18" stdDeviation="24" flood-color="#0f172a" flood-opacity="0.10" />
|
|
11
|
+
</filter>
|
|
12
|
+
<style>
|
|
13
|
+
.ink { fill: #111827; }
|
|
14
|
+
.muted { fill: #475569; }
|
|
15
|
+
.subtle { fill: #64748b; }
|
|
16
|
+
.accent { fill: #f59e0b; }
|
|
17
|
+
.done { fill: #dcfce7; stroke: #22c55e; }
|
|
18
|
+
.active { fill: #eff6ff; stroke: #3b82f6; }
|
|
19
|
+
.gate { fill: #fff7ed; stroke: #f59e0b; }
|
|
20
|
+
.pending { fill: #f8fafc; stroke: #cbd5e1; }
|
|
21
|
+
.rail { stroke: #94a3b8; }
|
|
22
|
+
.panel-border { stroke: #dbe4ee; }
|
|
23
|
+
.tag {
|
|
24
|
+
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
25
|
+
font-size: 18px;
|
|
26
|
+
font-weight: 640;
|
|
27
|
+
fill: #334155;
|
|
28
|
+
}
|
|
29
|
+
.stage {
|
|
30
|
+
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
31
|
+
font-size: 17px;
|
|
32
|
+
font-weight: 650;
|
|
33
|
+
fill: #475569;
|
|
34
|
+
}
|
|
35
|
+
.small {
|
|
36
|
+
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
37
|
+
font-size: 16px;
|
|
38
|
+
font-weight: 560;
|
|
39
|
+
fill: #64748b;
|
|
40
|
+
}
|
|
41
|
+
</style>
|
|
42
|
+
</defs>
|
|
43
|
+
|
|
44
|
+
<rect width="1600" height="680" fill="#f1f5f9" />
|
|
45
|
+
<rect x="72" y="58" width="1456" height="564" rx="36" fill="url(#surface)" filter="url(#soft-shadow)" />
|
|
46
|
+
|
|
47
|
+
<g transform="translate(130 126)">
|
|
48
|
+
<g transform="scale(1.02)">
|
|
49
|
+
<path d="M111.3 52.6A49 49 0 1 1 84 19.2" fill="none" stroke="#111827" stroke-width="8" stroke-linecap="round" />
|
|
50
|
+
<circle cx="98.6" cy="29.4" r="6.5" fill="#f59e0b" />
|
|
51
|
+
<path d="M41 48L62 64L41 80" fill="none" stroke="#111827" stroke-width="8" stroke-linecap="round" stroke-linejoin="round" />
|
|
52
|
+
<path d="M70 81H91" fill="none" stroke="#111827" stroke-width="8" stroke-linecap="round" />
|
|
53
|
+
</g>
|
|
54
|
+
<text
|
|
55
|
+
x="150"
|
|
56
|
+
y="62"
|
|
57
|
+
class="ink"
|
|
58
|
+
font-family="'SF Pro Display', 'OpenAI Sans', Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"
|
|
59
|
+
font-size="58"
|
|
60
|
+
letter-spacing="-0.2"
|
|
61
|
+
><tspan font-weight="740">HOLO</tspan><tspan font-weight="570">_Codex</tspan></text>
|
|
62
|
+
<text
|
|
63
|
+
x="152"
|
|
64
|
+
y="102"
|
|
65
|
+
class="muted"
|
|
66
|
+
font-family="'SF Pro Text', Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"
|
|
67
|
+
font-size="22"
|
|
68
|
+
>Human On Loop Codex</text>
|
|
69
|
+
</g>
|
|
70
|
+
|
|
71
|
+
<g transform="translate(130 310)">
|
|
72
|
+
<text
|
|
73
|
+
x="0"
|
|
74
|
+
y="0"
|
|
75
|
+
class="ink"
|
|
76
|
+
font-family="'SF Pro Display', Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"
|
|
77
|
+
font-size="34"
|
|
78
|
+
font-weight="720"
|
|
79
|
+
letter-spacing="-0.4"
|
|
80
|
+
>Human-gated PR delivery.</text>
|
|
81
|
+
<text
|
|
82
|
+
x="0"
|
|
83
|
+
y="42"
|
|
84
|
+
class="muted"
|
|
85
|
+
font-family="'SF Pro Text', Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"
|
|
86
|
+
font-size="21"
|
|
87
|
+
>Observable workflows for local Codex agents.</text>
|
|
88
|
+
</g>
|
|
89
|
+
|
|
90
|
+
<g transform="translate(760 162)">
|
|
91
|
+
<rect x="0" y="0" width="650" height="356" rx="28" fill="#ffffff" stroke="#dbe4ee" stroke-width="1.5" />
|
|
92
|
+
<rect x="28" y="28" width="594" height="62" rx="16" fill="#f8fafc" stroke="#e2e8f0" />
|
|
93
|
+
<circle cx="58" cy="59" r="8" class="accent" />
|
|
94
|
+
<text x="80" y="66" class="tag">PR Delivery Workflow Board</text>
|
|
95
|
+
|
|
96
|
+
<path d="M64 178H586" fill="none" class="rail" stroke-width="5" stroke-linecap="round" />
|
|
97
|
+
<g transform="translate(64 178)">
|
|
98
|
+
<circle r="23" class="done" stroke-width="3" />
|
|
99
|
+
<path d="M-8 0l5 6L9 -7" fill="none" stroke="#16a34a" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" />
|
|
100
|
+
<text x="-39" y="56" class="stage">Work Item</text>
|
|
101
|
+
</g>
|
|
102
|
+
<g transform="translate(138 178)">
|
|
103
|
+
<circle r="23" class="done" stroke-width="3" />
|
|
104
|
+
<path d="M-8 0l5 6L9 -7" fill="none" stroke="#16a34a" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" />
|
|
105
|
+
<text x="-18" y="56" class="stage">Plan</text>
|
|
106
|
+
</g>
|
|
107
|
+
<g transform="translate(212 178)">
|
|
108
|
+
<circle r="23" class="done" stroke-width="3" />
|
|
109
|
+
<path d="M-8 0l5 6L9 -7" fill="none" stroke="#16a34a" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" />
|
|
110
|
+
<text x="-22" y="56" class="stage">Build</text>
|
|
111
|
+
</g>
|
|
112
|
+
<g transform="translate(286 178)">
|
|
113
|
+
<circle r="23" class="done" stroke-width="3" />
|
|
114
|
+
<path d="M-8 0l5 6L9 -7" fill="none" stroke="#16a34a" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" />
|
|
115
|
+
<text x="-24" y="56" class="stage">Verify</text>
|
|
116
|
+
</g>
|
|
117
|
+
<g transform="translate(360 178)">
|
|
118
|
+
<circle r="23" class="done" stroke-width="3" />
|
|
119
|
+
<path d="M-8 0l5 6L9 -7" fill="none" stroke="#16a34a" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" />
|
|
120
|
+
<text x="-9" y="56" class="stage">PR</text>
|
|
121
|
+
</g>
|
|
122
|
+
<g transform="translate(434 178)">
|
|
123
|
+
<circle r="25" class="gate" stroke-width="3" />
|
|
124
|
+
<circle r="8" class="accent" />
|
|
125
|
+
<text x="-28" y="56" class="stage">Review</text>
|
|
126
|
+
</g>
|
|
127
|
+
<g transform="translate(510 178)">
|
|
128
|
+
<circle r="23" class="active" stroke-width="3" />
|
|
129
|
+
<text x="-27" y="56" class="stage">Ready</text>
|
|
130
|
+
</g>
|
|
131
|
+
<g transform="translate(586 178)">
|
|
132
|
+
<circle r="23" class="pending" stroke-width="3" />
|
|
133
|
+
<text x="-32" y="56" class="stage">Cleanup</text>
|
|
134
|
+
</g>
|
|
135
|
+
|
|
136
|
+
<rect x="42" y="284" width="566" height="48" rx="15" fill="#fff7ed" stroke="#fed7aa" />
|
|
137
|
+
<circle cx="68" cy="308" r="7" class="accent" />
|
|
138
|
+
<text x="88" y="314" class="small">Human on loop: approve before merge.</text>
|
|
139
|
+
</g>
|
|
140
|
+
</svg>
|
|
Binary file
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 640" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">HOLO-Codex social preview</title>
|
|
3
|
+
<desc id="desc">GitHub social preview for HOLO-Codex, a human-on-loop Codex workflow cockpit.</desc>
|
|
4
|
+
<defs>
|
|
5
|
+
<linearGradient id="panel" x1="0" x2="1" y1="0" y2="1">
|
|
6
|
+
<stop offset="0" stop-color="#ffffff" />
|
|
7
|
+
<stop offset="1" stop-color="#f8fafc" />
|
|
8
|
+
</linearGradient>
|
|
9
|
+
<filter id="soft-shadow" x="-10%" y="-20%" width="120%" height="140%">
|
|
10
|
+
<feDropShadow dx="0" dy="18" stdDeviation="20" flood-color="#0f172a" flood-opacity="0.10" />
|
|
11
|
+
</filter>
|
|
12
|
+
<style>
|
|
13
|
+
.ink { fill: #111827; }
|
|
14
|
+
.muted { fill: #475569; }
|
|
15
|
+
.line { stroke: #cbd5e1; }
|
|
16
|
+
.rail { stroke: #94a3b8; }
|
|
17
|
+
.accent { fill: #f59e0b; }
|
|
18
|
+
.done { fill: #dcfce7; stroke: #22c55e; }
|
|
19
|
+
.active { fill: #eff6ff; stroke: #3b82f6; }
|
|
20
|
+
.blocked { fill: #fff7ed; stroke: #f59e0b; }
|
|
21
|
+
.pending { fill: #f8fafc; stroke: #cbd5e1; }
|
|
22
|
+
.label {
|
|
23
|
+
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
24
|
+
font-size: 22px;
|
|
25
|
+
font-weight: 650;
|
|
26
|
+
fill: #111827;
|
|
27
|
+
}
|
|
28
|
+
.small {
|
|
29
|
+
font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
30
|
+
font-size: 16px;
|
|
31
|
+
font-weight: 560;
|
|
32
|
+
fill: #64748b;
|
|
33
|
+
}
|
|
34
|
+
</style>
|
|
35
|
+
</defs>
|
|
36
|
+
|
|
37
|
+
<rect width="1280" height="640" fill="#f1f5f9" />
|
|
38
|
+
<rect x="60" y="52" width="1160" height="536" rx="34" fill="url(#panel)" filter="url(#soft-shadow)" />
|
|
39
|
+
|
|
40
|
+
<g transform="translate(112 116)">
|
|
41
|
+
<g transform="scale(1.08)">
|
|
42
|
+
<path
|
|
43
|
+
d="M111.3 52.6A49 49 0 1 1 84 19.2"
|
|
44
|
+
fill="none"
|
|
45
|
+
stroke="#111827"
|
|
46
|
+
stroke-width="8"
|
|
47
|
+
stroke-linecap="round"
|
|
48
|
+
/>
|
|
49
|
+
<circle cx="98.6" cy="29.4" r="6.5" fill="#f59e0b" />
|
|
50
|
+
<path
|
|
51
|
+
d="M41 48L62 64L41 80"
|
|
52
|
+
fill="none"
|
|
53
|
+
stroke="#111827"
|
|
54
|
+
stroke-width="8"
|
|
55
|
+
stroke-linecap="round"
|
|
56
|
+
stroke-linejoin="round"
|
|
57
|
+
/>
|
|
58
|
+
<path d="M70 81H91" fill="none" stroke="#111827" stroke-width="8" stroke-linecap="round" />
|
|
59
|
+
</g>
|
|
60
|
+
<text
|
|
61
|
+
x="155"
|
|
62
|
+
y="64"
|
|
63
|
+
class="ink"
|
|
64
|
+
font-family="'SF Pro Display', 'OpenAI Sans', Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"
|
|
65
|
+
font-size="60"
|
|
66
|
+
letter-spacing="-0.2"
|
|
67
|
+
><tspan font-weight="740">HOLO</tspan><tspan font-weight="570">_Codex</tspan></text>
|
|
68
|
+
<text
|
|
69
|
+
x="158"
|
|
70
|
+
y="104"
|
|
71
|
+
class="muted"
|
|
72
|
+
font-family="'SF Pro Text', Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"
|
|
73
|
+
font-size="22"
|
|
74
|
+
letter-spacing="-0.1"
|
|
75
|
+
>Human On Loop Codex</text>
|
|
76
|
+
</g>
|
|
77
|
+
|
|
78
|
+
<g transform="translate(112 316)">
|
|
79
|
+
<text
|
|
80
|
+
class="ink"
|
|
81
|
+
x="0"
|
|
82
|
+
y="0"
|
|
83
|
+
font-family="'SF Pro Display', Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"
|
|
84
|
+
font-size="44"
|
|
85
|
+
font-weight="720"
|
|
86
|
+
letter-spacing="-0.4"
|
|
87
|
+
>Codex workflows, on loop.</text>
|
|
88
|
+
<text
|
|
89
|
+
class="muted"
|
|
90
|
+
x="0"
|
|
91
|
+
y="44"
|
|
92
|
+
font-family="'SF Pro Text', Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"
|
|
93
|
+
font-size="22"
|
|
94
|
+
letter-spacing="-0.1"
|
|
95
|
+
>Human-gated PR delivery.</text>
|
|
96
|
+
</g>
|
|
97
|
+
|
|
98
|
+
<g transform="translate(790 145)">
|
|
99
|
+
<rect x="0" y="0" width="372" height="340" rx="22" fill="#ffffff" stroke="#dbe4ee" stroke-width="1.5" />
|
|
100
|
+
<rect x="24" y="24" width="324" height="54" rx="14" fill="#f8fafc" stroke="#e2e8f0" />
|
|
101
|
+
<circle cx="51" cy="51" r="9" class="accent" />
|
|
102
|
+
<text x="72" y="57" class="small">Workflow Board</text>
|
|
103
|
+
|
|
104
|
+
<path d="M64 155H306" fill="none" class="rail" stroke-width="4" stroke-linecap="round" />
|
|
105
|
+
<g transform="translate(64 155)">
|
|
106
|
+
<circle r="22" class="done" stroke-width="3" />
|
|
107
|
+
<path d="M-8 0l5 6L9 -7" fill="none" stroke="#16a34a" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" />
|
|
108
|
+
<text x="-36" y="54" class="small">Plan</text>
|
|
109
|
+
</g>
|
|
110
|
+
<g transform="translate(144 155)">
|
|
111
|
+
<circle r="22" class="done" stroke-width="3" />
|
|
112
|
+
<path d="M-8 0l5 6L9 -7" fill="none" stroke="#16a34a" stroke-width="4" stroke-linecap="round" stroke-linejoin="round" />
|
|
113
|
+
<text x="-36" y="54" class="small">Build</text>
|
|
114
|
+
</g>
|
|
115
|
+
<g transform="translate(224 155)">
|
|
116
|
+
<circle r="24" class="blocked" stroke-width="3" />
|
|
117
|
+
<circle r="8" class="accent" />
|
|
118
|
+
<text x="-42" y="56" class="small">Review</text>
|
|
119
|
+
</g>
|
|
120
|
+
<g transform="translate(306 155)">
|
|
121
|
+
<circle r="22" class="pending" stroke-width="3" />
|
|
122
|
+
<text x="-36" y="54" class="small">Merge</text>
|
|
123
|
+
</g>
|
|
124
|
+
|
|
125
|
+
<rect x="34" y="252" width="304" height="58" rx="14" fill="#fff7ed" stroke="#fed7aa" />
|
|
126
|
+
<circle cx="61" cy="281" r="8" class="accent" />
|
|
127
|
+
<text x="80" y="277" class="label" font-size="20">Human gate</text>
|
|
128
|
+
<text x="80" y="298" class="small">Approve before merge.</text>
|
|
129
|
+
</g>
|
|
130
|
+
</svg>
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 920 440" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">HOLO-Codex wordmark options</title>
|
|
3
|
+
<desc id="desc">Three restrained wordmark treatments for HOLO-Codex.</desc>
|
|
4
|
+
<rect width="920" height="440" fill="#ffffff" />
|
|
5
|
+
<defs>
|
|
6
|
+
<style>
|
|
7
|
+
.label { fill: #64748b; font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; font-size: 14px; font-weight: 560; }
|
|
8
|
+
.caption { fill: #64748b; font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; font-size: 15px; }
|
|
9
|
+
.ink { fill: #111827; }
|
|
10
|
+
.accent { fill: #f59e0b; }
|
|
11
|
+
</style>
|
|
12
|
+
</defs>
|
|
13
|
+
|
|
14
|
+
<g transform="translate(54 58)">
|
|
15
|
+
<text class="label" x="0" y="0">A · Codex-like grotesk</text>
|
|
16
|
+
<text
|
|
17
|
+
class="ink"
|
|
18
|
+
x="0"
|
|
19
|
+
y="64"
|
|
20
|
+
font-family="'SF Pro Display', 'OpenAI Sans', Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"
|
|
21
|
+
font-size="54"
|
|
22
|
+
letter-spacing="-0.5"
|
|
23
|
+
><tspan font-weight="710">HOLO</tspan><tspan font-weight="610">-Codex</tspan></text>
|
|
24
|
+
<text class="caption" x="2" y="95">Quiet, modern, closest to a developer tool wordmark.</text>
|
|
25
|
+
</g>
|
|
26
|
+
|
|
27
|
+
<g transform="translate(54 192)">
|
|
28
|
+
<text class="label" x="0" y="0">B · More technical</text>
|
|
29
|
+
<text
|
|
30
|
+
class="ink"
|
|
31
|
+
x="0"
|
|
32
|
+
y="64"
|
|
33
|
+
font-family="'SF Pro Display', Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"
|
|
34
|
+
font-size="52"
|
|
35
|
+
letter-spacing="-0.2"
|
|
36
|
+
><tspan font-weight="760">HOLO</tspan><tspan font-weight="540">_Codex</tspan></text>
|
|
37
|
+
<text class="caption" x="2" y="95">Stronger CLI flavor, but the underscore can over-index on terminal UI.</text>
|
|
38
|
+
</g>
|
|
39
|
+
|
|
40
|
+
<g transform="translate(54 326)">
|
|
41
|
+
<text class="label" x="0" y="0">C · Human-on-loop emphasis</text>
|
|
42
|
+
<text
|
|
43
|
+
class="ink"
|
|
44
|
+
x="0"
|
|
45
|
+
y="64"
|
|
46
|
+
font-family="'SF Pro Rounded', 'SF Pro Display', Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif"
|
|
47
|
+
font-size="52"
|
|
48
|
+
letter-spacing="-0.3"
|
|
49
|
+
><tspan font-weight="720">HOLO</tspan><tspan class="accent" font-weight="720">·</tspan><tspan font-weight="610">Codex</tspan></text>
|
|
50
|
+
<text class="caption" x="2" y="95">Warmer and more ownable, but farther from the Codex reference.</text>
|
|
51
|
+
</g>
|
|
52
|
+
</svg>
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# Agent-loop-first Delivery Audit Checklist
|
|
2
|
+
|
|
3
|
+
这份清单用于审计一次以 `agent-loop` 为优先入口的真实交付。目标不是证明 dashboard 好看,而是判断从 issue 选择到 PR 合并的关键行为是否可恢复、可审计、可暂停。
|
|
4
|
+
|
|
5
|
+
记录原则:
|
|
6
|
+
|
|
7
|
+
- 只记录摘要、ID、状态、时间、命令名和证据位置。
|
|
8
|
+
- 不记录 dashboard token、secret-like 内容、完整 worker raw log、私有 prompt 全文。
|
|
9
|
+
- 高风险写操作必须先写明原因,再记录结果。
|
|
10
|
+
- 每项结论使用 `PASS`、`PARTIAL`、`GAP`。
|
|
11
|
+
|
|
12
|
+
## 0. Preflight
|
|
13
|
+
|
|
14
|
+
| 项目 | 检查动作 | 预期证据 | 记录位置 | 判定标准 |
|
|
15
|
+
| --- | --- | --- | --- | --- |
|
|
16
|
+
| Git 基线 | `git status --short --branch`、`git switch main`、`git pull --ff-only origin main` | branch、HEAD、worktree clean 状态 | pilot report 的 Preflight | `PASS`:main 最新且干净;`PARTIAL`:可解释的本地运行态变化;`GAP`:旧分支或脏文件原因不明 |
|
|
17
|
+
| Loop 状态 | `pnpm agent-loop status --json`、`pnpm agent-loop observe --json` | current run id、status、state、branch、updatedAt | pilot report 的 Preflight | `PASS`:无 active run 或 active run 属于当前 work item;`PARTIAL`:旧 run 已记录并隔离;`GAP`:旧 active gate 未处理就开工 |
|
|
18
|
+
| 事件基线 | `pnpm agent-loop timeline --limit 20 --json`、`pnpm agent-loop workers --events --json` | 最近 state/event/worker/artifact 摘要 | pilot report 的 Preflight | `PASS`:能解释当前状态;`PARTIAL`:能看见事件但缺 work item 语义;`GAP`:关键状态只能靠聊天判断 |
|
|
19
|
+
| Issue 基线 | `gh issue view <audit>`、`gh issue view <payload>`、`gh issue list` | audit issue、payload issue、open queue | pilot report 的 Issue Selection | `PASS`:选择来源可追溯;`GAP`:dashboard 或 CLI 无法表达当前 work item |
|
|
20
|
+
|
|
21
|
+
## 1. Issue Selection
|
|
22
|
+
|
|
23
|
+
| 项目 | 检查动作 | 预期证据 | 记录位置 | 判定标准 |
|
|
24
|
+
| --- | --- | --- | --- | --- |
|
|
25
|
+
| Tracker/payload 区分 | 确认 audit tracker 和 pilot payload 是两个 issue | tracker 用于流程审计,payload 用于小改动 | Issue Selection | `PASS`:两者职责清楚;`GAP`:一个 issue 同时承担范围和审计导致混乱 |
|
|
26
|
+
| 优先级来源 | 检查 open issues、handoff、用户指定内容 | 用户指定优先,其次 GitHub issues 和 handoff | Issue Selection | `PASS`:选择理由有 issue/handoff 证据;`PARTIAL`:由 commander 解释但 dashboard 不显示;`GAP`:选择过程不可复现 |
|
|
27
|
+
| 范围控制 | 判断 payload 是否低风险 | 预期文件、non-goals、是否不碰 runtime | Issue Selection | `PASS`:改动足够小;`GAP`:pilot 样本本身扩大架构风险 |
|
|
28
|
+
|
|
29
|
+
## 2. Agent-loop-first Execution
|
|
30
|
+
|
|
31
|
+
| 项目 | 检查动作 | 预期证据 | 记录位置 | 判定标准 |
|
|
32
|
+
| --- | --- | --- | --- | --- |
|
|
33
|
+
| Dry run | `pnpm agent-loop run --dry-run --json` | run id、state、dry-run artifact、timeline event | Execution Audit | `PASS`:dry-run 不改变真实执行状态且可解释;`PARTIAL`:有 artifact 但 state/transition 表达不一致;`GAP`:无 artifact 或不可复现 |
|
|
34
|
+
| Run until gate | `pnpm agent-loop run --until=gate --json` | state progression、gate 或 worker 创建 | Execution Audit | `PASS`:能推进到明确 gate 或 worker;`PARTIAL`:打开 gate 但不能绑定 work item;`GAP`:无清晰失败证据 |
|
|
35
|
+
| Step/resume | 有 existing run 时执行 `step` 或 `resume` | state change、worker attempt、gate decision consumed | Execution Audit | `PASS`:resume/step 行为和 gate 语义一致;`PARTIAL`:CLI 可见但 dashboard 指导不足;`GAP`:需要聊天外判断 |
|
|
36
|
+
| Worker | `pnpm agent-loop workers --events --json` | worker type/status/thread id/artifacts | Worker Evidence | `PASS`:worker lifecycle 完整;`PARTIAL`:只有失败摘要;`GAP`:worker 行为不进入 state |
|
|
37
|
+
| Artifact | Dashboard Artifact Viewer 或 artifact ids | dry-run plan、worker prompt/jsonl、audit export | Artifact Evidence | `PASS`:artifact 可列出、可只读打开;`PARTIAL`:只能 CLI 看 ID;`GAP`:关键 evidence 不持久化 |
|
|
38
|
+
| Gate | `observe`、timeline、Gate Center、Recovery Center | active gate kind/message/details/status | Gate Evidence | `PASS`:active/historical 清楚且可操作;`PARTIAL`:可见但缺决策上下文;`GAP`:gate 只能从 raw log 判断 |
|
|
39
|
+
|
|
40
|
+
## 3. Dashboard 13-page Audit
|
|
41
|
+
|
|
42
|
+
| 页面 | 检查动作 | 预期证据 | 记录位置 | 判定标准 |
|
|
43
|
+
| --- | --- | --- | --- | --- |
|
|
44
|
+
| Mission Control | 检查 current run、next action、autonomy、merge readiness、summary | 能判断当前 run 是否可继续 | Dashboard Audit | `PASS`:页面能指导下一步;`PARTIAL`:状态可见但 work item 不明;`GAP`:核心状态缺失 |
|
|
45
|
+
| Plan Navigator | 检查下一项、计划、handoff 线索 | 能解释选择了哪个 issue 或为什么不明确 | Dashboard Audit | `PASS`:work item 可见;`PARTIAL`:只显示 plans;`GAP`:不能表示用户指定 issue |
|
|
46
|
+
| Policy Config | 只检查渲染、diff preview、保存按钮状态,不保存 | 配置可读,save 是明确写操作 | Dashboard Audit | `PASS`:只读检查安全;`GAP`:无法区分 preview/save 风险 |
|
|
47
|
+
| Dry-run Preview | 检查 planned commands、workflow stages、possible gates、missing conditions | dry-run artifact 和 UI 一致 | Dashboard Audit | `PASS`:能预判下一步;`PARTIAL`:能显示但不绑定当前 issue;`GAP`:空白或误导 |
|
|
48
|
+
| Notifications | 检查关注项、mark read 按钮状态 | 无通知时禁用,通知有来源 | Dashboard Audit | `PASS`:状态清楚;`PARTIAL`:通知有但不指向动作;`GAP`:噪音或遗漏 blocker |
|
|
49
|
+
| Observability Console | 使用 timeline/worker/gate/artifact 筛选 | 筛选结果能对应 CLI | Dashboard Audit | `PASS`:和 CLI 互相印证;`PARTIAL`:能筛但缺 work item;`GAP`:筛选不可用 |
|
|
50
|
+
| Gate Center | 检查 active/historical、raw/original message、intervention panel | active gate 驱动操作,historical 不误导 | Dashboard Audit | `PASS`:gate 可审计;`PARTIAL`:状态清楚但处理入口有限;`GAP`:active/historical 混淆 |
|
|
51
|
+
| PR Inbox | PR 前为空或显示无 PR;PR 后看 PR/CI/review | 能判断 PR/CI/review 是否 ready | PR Audit | `PASS`:PR 状态足以决策;`PARTIAL`:需 GitHub 补证据;`GAP`:dashboard 不知道 PR |
|
|
52
|
+
| Worker Runs | 检查 lifecycle、events、artifact ids、raw message 折叠 | worker 状态和 artifacts 可追踪 | Worker Evidence | `PASS`:完整;`PARTIAL`:失败可见但修复建议缺失;`GAP`:worker 不出现 |
|
|
53
|
+
| Scope Guard | 检查 GitNexus/scope evidence | scope guard 证据和 PR diff 对应 | Scope Audit | `PASS`:能支持 merge readiness;`PARTIAL`:只显示摘要;`GAP`:scope 只能手动判断 |
|
|
54
|
+
| Event Ledger | 检查 append-only state/event/decision | stop/recover/gate 等关键决策存在 | Event Evidence | `PASS`:关键行为都有 event;`PARTIAL`:command 可见但 commander 手工行为缺失;`GAP`:行为不进 ledger |
|
|
55
|
+
| Artifact Viewer | 打开只读 artifact 列表和代表项 | artifact 可读且不泄露 token | Artifact Evidence | `PASS`:可读、安全;`PARTIAL`:可列不可解释;`GAP`:关键 artifact 缺失 |
|
|
56
|
+
| Recovery Center | 检查 historical/stale/handled gate、re-evaluate 可见性 | 历史 gate 不自动消失,写操作明确 | Gate Evidence | `PASS`:恢复链路清楚;`PARTIAL`:可见但需 CLI 决策;`GAP`:无法判断是否应恢复 |
|
|
57
|
+
|
|
58
|
+
## 4. Button Risk Classification
|
|
59
|
+
|
|
60
|
+
| 等级 | 包含按钮/动作 | 检查动作 | 记录要求 | 判定标准 |
|
|
61
|
+
| --- | --- | --- | --- | --- |
|
|
62
|
+
| 只读 | refresh、filter、expand/collapse、artifact read、theme/language toggle | 可以点击代表项 | 记录页面、时间、结果 | `PASS`:不改变 repo/loop 状态;`GAP`:只读动作造成状态变化 |
|
|
63
|
+
| 低风险写操作 | mark notification read、historical gate re-evaluate | 仅在有明确样本时点击 | 记录前后 state/event | `PASS`:append-only 或局部状态变化可审计;`GAP`:写操作无 event |
|
|
64
|
+
| 高风险写操作 | run、step、resume、recover、stop、approve/reject、save config | 只在 pilot 需要时执行 | 记录原因、命令、结果、run id | `PASS`:动作有 state/event;`PARTIAL`:动作成功但退出码/状态表达不一致;`GAP`:动作绕过审计 |
|
|
65
|
+
|
|
66
|
+
## 5. Commander Intervention
|
|
67
|
+
|
|
68
|
+
每次 commander 直接介入使用这个格式:
|
|
69
|
+
|
|
70
|
+
```text
|
|
71
|
+
Time:
|
|
72
|
+
Trigger:
|
|
73
|
+
Commander action:
|
|
74
|
+
Dashboard evidence:
|
|
75
|
+
CLI evidence:
|
|
76
|
+
Captured by agent-loop: yes/no/partial
|
|
77
|
+
Gap owner: none/#45/#46
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
判定:
|
|
81
|
+
|
|
82
|
+
- `PASS`:介入动作进入 agent-loop event 或 artifact,并能从 dashboard 找到。
|
|
83
|
+
- `PARTIAL`:CLI 或 PR comment 有证据,但 dashboard 不完整。
|
|
84
|
+
- `GAP`:只能从聊天或本地终端历史知道。
|
|
85
|
+
|
|
86
|
+
## 6. PR, Review, CI
|
|
87
|
+
|
|
88
|
+
| 项目 | 检查动作 | 预期证据 | 记录位置 | 判定标准 |
|
|
89
|
+
| --- | --- | --- | --- | --- |
|
|
90
|
+
| PR body | 检查是否引用 payload issue、audit tracker、run id、dashboard evidence | `Closes #payload`、`Updates #audit`、run id、manual intervention | PR Audit | `PASS`:读 PR 能复盘;`GAP`:只靠聊天 |
|
|
91
|
+
| Internal tester/reviewer | 每个 agent report 发 PR issue comment | agent/model、PASS/BLOCK、findings by severity | PR comments | `PASS`:report 可查;`PARTIAL`:owner 代发;`GAP`:无 PR comment |
|
|
92
|
+
| External review | UI/runtime 改动时做 AGY/Gemini 或 Claude ACP;docs-only 可记录不需要 | reviewer rationale 或 report comment | PR comments | `PASS`:需要时存在;`PARTIAL`:跳过理由清楚;`GAP`:需要却没做 |
|
|
93
|
+
| CI/local checks | `pnpm lint`,runtime 改动再跑 tests;GitNexus detect | check output summary、CI status | PR body/comment | `PASS`:无 blocker;`GAP`:失败被当 follow-up |
|
|
94
|
+
| Merge readiness | PR Inbox、GitHub checks、review comments | ready/not ready 原因 | PR Audit | `PASS`:dashboard+GitHub 可判断;`PARTIAL`:主要靠 GitHub;`GAP`:无法判断 |
|
|
95
|
+
|
|
96
|
+
## 7. Security And Token
|
|
97
|
+
|
|
98
|
+
| 项目 | 检查动作 | 预期证据 | 记录位置 | 判定标准 |
|
|
99
|
+
| --- | --- | --- | --- | --- |
|
|
100
|
+
| URL token | 看 dashboard URL | URL 不含 token | Security Audit | `PASS`:无 token;`GAP`:token 出现在 URL |
|
|
101
|
+
| Auto-login | 打开 loopback dashboard | 自动进入 dashboard | Security Audit | `PASS`:无需粘贴 token;`PARTIAL`:fallback login 可用;`GAP`:必须手动找 token |
|
|
102
|
+
| Cache control | 只读检查 index response header | `cache-control: no-store` | Security Audit | `PASS`:存在;`GAP`:HTML token 可能缓存 |
|
|
103
|
+
| Mutation guard | 引用或执行安全的缺 token/bad Origin 测试 | 401/403 仍生效 | Security Audit | `PASS`:guard 不回退;`PARTIAL`:引用近期验证;`GAP`:无证据 |
|
|
104
|
+
| Report hygiene | 检查 docs、PR body、comments、screenshots | 不含 token/raw secret/full worker log | Security Audit | `PASS`:只写摘要;`GAP`:泄露敏感内容 |
|
|
105
|
+
|
|
106
|
+
## 8. Output Matrix
|
|
107
|
+
|
|
108
|
+
每次 pilot report 必须包含:
|
|
109
|
+
|
|
110
|
+
| Capability | Status | Evidence | Gap Owner |
|
|
111
|
+
| --- | --- | --- | --- |
|
|
112
|
+
| Work item selection visible | PASS/PARTIAL/GAP | issue/handoff/dashboard evidence | none/#45/#46 |
|
|
113
|
+
| Run lifecycle visible | PASS/PARTIAL/GAP | status/observe/timeline | none/#45 |
|
|
114
|
+
| Worker lifecycle visible | PASS/PARTIAL/GAP | Worker Runs/artifacts | none/#45 |
|
|
115
|
+
| Gate/recovery auditable | PASS/PARTIAL/GAP | Gate Center/Recovery/Event Ledger | none/#45 |
|
|
116
|
+
| Dashboard page coverage | PASS/PARTIAL/GAP | 13-page checklist | none |
|
|
117
|
+
| Commander manual actions visible | PASS/PARTIAL/GAP | PR comments/events | #45 |
|
|
118
|
+
| External review visible | PASS/PARTIAL/GAP | PR comments/dashboard artifacts | #45 |
|
|
119
|
+
| PR/CI/merge readiness visible | PASS/PARTIAL/GAP | PR Inbox/CI/GitHub | #45/#46 |
|
|
120
|
+
| Skill/state-machine integration | PASS/PARTIAL/GAP | ability to drive payload through agent-loop | #46 |
|
|
121
|
+
| Token/security posture | PASS/PARTIAL/GAP | URL/header/report checks | none |
|
|
122
|
+
|
|
123
|
+
结论必须回答:
|
|
124
|
+
|
|
125
|
+
- 今天哪些能力可以信任。
|
|
126
|
+
- 哪些能力部分可用。
|
|
127
|
+
- 哪些缺口阻碍完整运营采用。
|
|
128
|
+
- #45 是否应该作为下一项。
|
|
129
|
+
- #46 是否应该等 #45 完成后再做。
|