@oneie/claude 0.7.0 → 0.9.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/abm-strategist.md +89 -0
- package/agents/ads-meta.md +97 -0
- package/agents/analyst.md +173 -0
- package/agents/architect.md +280 -0
- package/agents/brand-guardian.md +88 -0
- package/agents/brand-strategist.md +92 -0
- package/agents/campaign-content.md +90 -0
- package/agents/campaign-email.md +88 -0
- package/agents/campaign-sms.md +87 -0
- package/agents/campaign-social.md +87 -0
- package/agents/cco.md +99 -0
- package/agents/ceo.md +106 -0
- package/agents/chairman.md +120 -0
- package/agents/cmo.md +101 -0
- package/agents/community-greeter.md +89 -0
- package/agents/community-moderator.md +92 -0
- package/agents/compliance.md +92 -0
- package/agents/copywriter.md +100 -0
- package/agents/creative-strategist.md +95 -0
- package/agents/cro.md +98 -0
- package/agents/cto.md +267 -0
- package/agents/customer-interviewer.md +93 -0
- package/agents/customer-researcher.md +89 -0
- package/agents/customer-success-manager.md +90 -0
- package/agents/customer-trainer.md +90 -0
- package/agents/cxo.md +100 -0
- package/agents/demand-creator.md +89 -0
- package/agents/demo-mover.md +83 -0
- package/agents/demo-specialist.md +89 -0
- package/agents/demo-thai-family-law.md +87 -0
- package/agents/designer.md +112 -0
- package/agents/discovery-caller.md +98 -0
- package/agents/doctor.md +139 -0
- package/agents/educate-coach.md +100 -0
- package/agents/elevate-tutor.md +83 -0
- package/agents/email-lifecycle-marketer.md +91 -0
- package/agents/engage-specialist.md +99 -0
- package/agents/events-coordinator.md +90 -0
- package/agents/foundation-builder.md +94 -0
- package/agents/funnel-architect.md +89 -0
- package/agents/gift-creator.md +100 -0
- package/agents/google-ads.md +103 -0
- package/agents/guide.md +292 -0
- package/agents/helpdesk-dispatcher.md +88 -0
- package/agents/hook-specialist.md +91 -0
- package/agents/identify-optimizer.md +101 -0
- package/agents/implementer.md +305 -0
- package/agents/incident-commander.md +120 -0
- package/agents/insights-lead.md +93 -0
- package/agents/journey-runner.md +113 -0
- package/agents/linkedin-ads.md +123 -0
- package/agents/live-sales-chat.md +90 -0
- package/agents/market-researcher.md +88 -0
- package/agents/media-buyer.md +96 -0
- package/agents/movers-customer-researcher.md +95 -0
- package/agents/movers-foundation-builder.md +96 -0
- package/agents/movers-market-researcher.md +97 -0
- package/agents/movers-pricing-strategist.md +171 -0
- package/agents/nurture-architect.md +99 -0
- package/agents/offer-architect.md +92 -0
- package/agents/onboarder.md +222 -0
- package/agents/onboarding-specialist.md +92 -0
- package/agents/operations-dashboard.md +98 -0
- package/agents/perf-engineer.md +348 -0
- package/agents/playbook-writer.md +71 -0
- package/agents/plg-strategist.md +91 -0
- package/agents/positioning-architect.md +88 -0
- package/agents/press-officer.md +89 -0
- package/agents/pricing-strategist.md +94 -0
- package/agents/privacy-officer.md +92 -0
- package/agents/referral-manager.md +91 -0
- package/agents/refine-analyst.md +102 -0
- package/agents/release-manager.md +261 -0
- package/agents/renewals-upsell-rep.md +90 -0
- package/agents/review-engineer.md +327 -0
- package/agents/rewards-steward.md +82 -0
- package/agents/sales-call-coach.md +94 -0
- package/agents/sales-closer.md +98 -0
- package/agents/security-auditor.md +313 -0
- package/agents/sell-closer.md +101 -0
- package/agents/share-amplifier.md +99 -0
- package/agents/social-media-manager.md +92 -0
- package/agents/storyteller.md +250 -0
- package/agents/strategist.md +83 -0
- package/agents/strategy-aligner.md +94 -0
- package/agents/support-agent.md +90 -0
- package/agents/tagger.md +245 -0
- package/agents/tech-writer.md +216 -0
- package/agents/test-engineer.md +243 -0
- package/agents/tiktok-ads.md +105 -0
- package/agents/tracking-engineer.md +92 -0
- package/agents/upsell-strategist.md +101 -0
- package/agents/voice.md +85 -0
- package/agents/w4-tools.md +153 -0
- package/agents/w4-verify.md +20 -138
- package/agents/workflow-optimiser.md +84 -0
- package/commands/close.md +814 -160
- package/commands/create.md +2 -2
- package/commands/deploy.md +554 -175
- package/commands/do.md +119 -109
- package/commands/fast.md +67 -0
- package/commands/improve.md +2 -2
- package/commands/one.md +418 -0
- package/commands/see.md +1 -1
- package/commands/sync.md +1 -1
- package/commands/tasks.md +222 -0
- package/commands/vespio.md +110 -0
- package/commands/vespio.remote.md +227 -0
- package/hooks/hooks.json +25 -79
- package/hooks/lib/governor-escape-match.sh +88 -0
- package/hooks/lib/hook.sh +4 -13
- package/hooks/lib/signal.sh +9 -2
- package/hooks/scripts/branch-pin.sh +6 -0
- package/hooks/scripts/config-protect.sh +6 -0
- package/hooks/scripts/do-outcome-gate.sh +19 -2
- package/hooks/scripts/git-add-guard.sh +43 -2
- package/hooks/scripts/governor-escape.sh +96 -0
- package/hooks/scripts/load-guard.sh +127 -0
- package/hooks/scripts/post-edit-check.sh +36 -29
- package/hooks/scripts/session-start.sh +34 -80
- package/hooks/scripts/task-complete-verify.sh +46 -40
- package/package.json +1 -1
- package/rules/documentation.md +9 -0
- package/scripts/ad-copy-lint.sh +656 -0
- package/scripts/agentverse-audit.sh +256 -0
- package/scripts/asi-walk.sh +435 -0
- package/scripts/astro-build-cached.sh +143 -0
- package/scripts/blocks-manifest-cached.sh +100 -0
- package/scripts/blocks-manifest.mjs +497 -0
- package/scripts/blocks-ratchet.sh +116 -0
- package/scripts/blocks-render-probe.mjs +529 -0
- package/scripts/blocks-usage.mjs +334 -0
- package/scripts/chat-context-check.sh +89 -0
- package/scripts/close-metrics.sh +558 -0
- package/scripts/close-owner.sh +268 -0
- package/scripts/db-sync-lock-check.sh +116 -0
- package/scripts/deploy-dev.sh +35 -0
- package/scripts/deploy-emit.sh +298 -0
- package/scripts/deploy-gate-check.sh +128 -0
- package/scripts/deploy-ready.sh +78 -0
- package/scripts/deploy-record.sh +605 -0
- package/scripts/deploy.sh +1273 -0
- package/scripts/do-auto.sh +598 -48
- package/scripts/do-brief.sh +113 -0
- package/scripts/do-close.sh +1137 -0
- package/scripts/do-commit.sh +75 -0
- package/scripts/do-consumer-sweep.sh +18 -1
- package/scripts/do-cycle-shape-check.sh +160 -0
- package/scripts/do-decide.sh +476 -0
- package/scripts/do-derive-check.sh +436 -0
- package/scripts/do-fleet.sh +106 -28
- package/scripts/do-folder.sh +10 -1
- package/scripts/do-next.sh +106 -0
- package/scripts/do-orchestrate.sh +17 -5
- package/scripts/do-plan-json.mjs +201 -0
- package/scripts/do-plan-json.sh +8 -0
- package/scripts/do-preflight.sh +117 -0
- package/scripts/do-project.sh +157 -0
- package/scripts/do-prove-selftest.sh +108 -0
- package/scripts/do-prove.sh +295 -23
- package/scripts/do-rank.py +31 -1
- package/scripts/do-recon-cache.sh +7 -1
- package/scripts/do-recon-pack.sh +196 -0
- package/scripts/do-reconcile.sh +121 -4
- package/scripts/do-signal.sh +280 -23
- package/scripts/do-smoke.sh +18 -1
- package/scripts/do-test-gate.sh +80 -0
- package/scripts/do-tick.sh +102 -0
- package/scripts/do-tier.sh +6 -0
- package/scripts/do-triage.sh +182 -0
- package/scripts/do-ui-gate.sh +1 -1
- package/scripts/do-w4-gates.sh +451 -0
- package/scripts/do-walk.sh +12 -1
- package/scripts/env-sync.sh +173 -0
- package/scripts/factory-brief-check.sh +330 -0
- package/scripts/factory-check.sh +68 -14
- package/scripts/factory-close-check.sh +257 -0
- package/scripts/factory-emit.sh +211 -0
- package/scripts/factory-executor-check.mjs +353 -0
- package/scripts/factory-peak.sh +301 -0
- package/scripts/factory-repo.sh +118 -3
- package/scripts/factory-review-check.mjs +61 -0
- package/scripts/factory-ship.sh +61 -0
- package/scripts/factory-tasks-check.sh +18 -1
- package/scripts/factory-turn.sh +326 -0
- package/scripts/factory-walk.sh +396 -0
- package/scripts/factory-width.sh +57 -0
- package/scripts/fade-toxic.sh +4 -3
- package/scripts/fixtures/factory-brief-real.md +44 -0
- package/scripts/fixtures/triage-dupe.md +5 -0
- package/scripts/fleet-manifest.mjs +108 -0
- package/scripts/fleet-status.sh +110 -0
- package/scripts/full-suite-paths-check.sh +144 -0
- package/scripts/gate-reaper-check.sh +98 -0
- package/scripts/gate-reaper.sh +125 -0
- package/scripts/gate-run.sh +73 -0
- package/scripts/gc-content-check.sh +140 -0
- package/scripts/gen-dev-config.py +20 -0
- package/scripts/govern-bound-check.sh +60 -0
- package/scripts/govern-claims-check.sh +233 -0
- package/scripts/govern-mem-check.sh +290 -0
- package/scripts/governor-doors-check.sh +362 -0
- package/scripts/governor-escape-check.sh +171 -0
- package/scripts/health.sh +413 -0
- package/scripts/id-inventory.mjs +418 -0
- package/scripts/land.sh +551 -0
- package/scripts/lib/gc-finished.sh +77 -0
- package/scripts/lib/govern.sh +361 -0
- package/scripts/lib/govern.ts +756 -0
- package/scripts/lighthouse-run.sh +187 -0
- package/scripts/livekit-live-check.sh +61 -0
- package/scripts/livekit-ratchet.sh +46 -0
- package/scripts/load-guard-check.sh +49 -0
- package/scripts/machine-check.sh +102 -0
- package/scripts/machine-watch.sh +177 -0
- package/scripts/one-agents.mjs +415 -0
- package/scripts/one-resume.sh +78 -0
- package/scripts/orphan-baseline.json +182 -0
- package/scripts/orphan-modules.mjs +179 -0
- package/scripts/pr-body.sh +335 -0
- package/scripts/preview-fd-check.sh +289 -0
- package/scripts/promise-manifest.mjs +24 -1
- package/scripts/release.sh +322 -0
- package/scripts/roles-check.sh +946 -0
- package/scripts/sdk-build-cached.sh +64 -0
- package/scripts/signal-watch.sh +241 -0
- package/scripts/skills-publish.sh +94 -0
- package/scripts/speed-cache-check.sh +173 -0
- package/scripts/speed-check.mjs +907 -0
- package/scripts/speed-parity-check.sh +648 -0
- package/scripts/speed-waterfall-check.sh +355 -0
- package/scripts/substrate-env-parity.mjs +156 -0
- package/scripts/tasks-claim-race.mjs +108 -0
- package/scripts/tasks-loop.sh +185 -0
- package/scripts/test-cached.sh +255 -0
- package/scripts/test-full.sh +87 -0
- package/scripts/test-honesty.mjs +137 -0
- package/scripts/test-lanes.sh +166 -0
- package/scripts/test-speed.sh +94 -0
- package/scripts/triage-shape-check.sh +149 -0
- package/scripts/tsc-cached.sh +179 -0
- package/scripts/typedb-flake-check.sh +197 -0
- package/scripts/urls-lint.sh +15 -0
- package/scripts/verify-fast.sh +445 -0
- package/scripts/vespio-sync.sh +149 -0
- package/scripts/wf-check.mjs +104 -1
- package/scripts/worktree-preview.sh +879 -0
- package/scripts/worktree-up.sh +208 -0
- package/skills/livekit-agents/SKILL.md +285 -0
- package/skills/livekit-agents/references/freshness-rules.md +168 -0
- package/skills/shadcn/SKILL.md +1 -1
- package/skills/signal/SKILL.md +0 -1
- package/skills/voice/SKILL.md +94 -6
- package/skills/voice/corpus-check.sh +87 -0
- package/hooks/scripts/compact-hint.sh +0 -35
- package/hooks/scripts/gate-guard.sh +0 -83
- package/hooks/scripts/read-tracker.sh +0 -26
- package/hooks/scripts/session-end-verify.sh +0 -51
- package/hooks/scripts/stop-reflect.sh +0 -140
- package/hooks/scripts/sync-priority-todo.sh +0 -57
- package/hooks/scripts/sync-todo-docs.sh +0 -46
- package/hooks/scripts/tool-signal.sh +0 -48
- package/scripts/do-tasks-bridge.py +0 -366
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
{
|
|
2
|
+
"count": 176,
|
|
3
|
+
"files": [
|
|
4
|
+
"src/components/AddDeviceButton.tsx",
|
|
5
|
+
"src/components/ErrorBoundary.tsx",
|
|
6
|
+
"src/components/InboxBell.tsx",
|
|
7
|
+
"src/components/MobileHandoff.tsx",
|
|
8
|
+
"src/components/PersonalizedHero.tsx",
|
|
9
|
+
"src/components/ReportButton.tsx",
|
|
10
|
+
"src/components/SpeedReceipt.tsx",
|
|
11
|
+
"src/components/agents/AgentDrawer.tsx",
|
|
12
|
+
"src/components/agents/VerifiedBadge.tsx",
|
|
13
|
+
"src/components/analytics/SuggestedPopulations.tsx",
|
|
14
|
+
"src/components/auth/BrandLoader.tsx",
|
|
15
|
+
"src/components/auth/CloudRestorePanel.tsx",
|
|
16
|
+
"src/components/auth/InviteButton.tsx",
|
|
17
|
+
"src/components/auth/RecoveryPhraseModal.tsx",
|
|
18
|
+
"src/components/auth/WalletSignIn.tsx",
|
|
19
|
+
"src/components/billing/CancelModal.tsx",
|
|
20
|
+
"src/components/billing/CrossChainPayout.tsx",
|
|
21
|
+
"src/components/cards/CourseCard.tsx",
|
|
22
|
+
"src/components/cards/LessonCard.tsx",
|
|
23
|
+
"src/components/cards/StatMetricsCard.tsx",
|
|
24
|
+
"src/components/cards/TimelineCard.tsx",
|
|
25
|
+
"src/components/chat/ChatIdentityBadge.tsx",
|
|
26
|
+
"src/components/chat/PtcorpCardRenderer.tsx",
|
|
27
|
+
"src/components/chat/ToolResultPart.tsx",
|
|
28
|
+
"src/components/course/CountdownTimer.tsx",
|
|
29
|
+
"src/components/course/EnhancedCourseCard.tsx",
|
|
30
|
+
"src/components/course/EnhancedQuiz.tsx",
|
|
31
|
+
"src/components/course/EnhancedVideoPlayer.tsx",
|
|
32
|
+
"src/components/crm/ContactEdit.tsx",
|
|
33
|
+
"src/components/crm/ContactIdentity.tsx",
|
|
34
|
+
"src/components/dashboard/ClientsCard.tsx",
|
|
35
|
+
"src/components/data/KeyValueGrid.tsx",
|
|
36
|
+
"src/components/do/BuildFunnelByAxis.tsx",
|
|
37
|
+
"src/components/do/CheaperPerCycle.tsx",
|
|
38
|
+
"src/components/do/FourSCompounding.tsx",
|
|
39
|
+
"src/components/do/RouterBrain.tsx",
|
|
40
|
+
"src/components/editor/index.ts",
|
|
41
|
+
"src/components/features/Gate.tsx",
|
|
42
|
+
"src/components/features/StageSwitch.tsx",
|
|
43
|
+
"src/components/in/AgentSupervisionScreen.tsx",
|
|
44
|
+
"src/components/in/DestRail.tsx",
|
|
45
|
+
"src/components/in/EntityActionBar.tsx",
|
|
46
|
+
"src/components/in/FunctionTabs.tsx",
|
|
47
|
+
"src/components/in/HeaderPillRow.tsx",
|
|
48
|
+
"src/components/in/InboxRail.tsx",
|
|
49
|
+
"src/components/in/NewThreadPane.tsx",
|
|
50
|
+
"src/components/in/OwnershipFilter.tsx",
|
|
51
|
+
"src/components/in/PersonScreen.tsx",
|
|
52
|
+
"src/components/in/composer/TemplatePicker.tsx",
|
|
53
|
+
"src/components/layout/DetailHeader.tsx",
|
|
54
|
+
"src/components/media/VideoEmbed.astro",
|
|
55
|
+
"src/components/motion/ScrollScene.tsx",
|
|
56
|
+
"src/components/motion/demo/CounterDemo.tsx",
|
|
57
|
+
"src/components/motion/demo/GlowGrid.tsx",
|
|
58
|
+
"src/components/motion/demo/TypewriterDemo.tsx",
|
|
59
|
+
"src/components/org/AddMemberButton.tsx",
|
|
60
|
+
"src/components/org/CreateOrgDrawer.tsx",
|
|
61
|
+
"src/components/org/CustomAgentButton.tsx",
|
|
62
|
+
"src/components/org/DeleteAgencyButton.tsx",
|
|
63
|
+
"src/components/pages/PagesListIsland.tsx",
|
|
64
|
+
"src/components/pay/CheckoutAppearance.ts",
|
|
65
|
+
"src/components/peer/LocalControls.tsx",
|
|
66
|
+
"src/components/pulse/PulseAtlas.tsx",
|
|
67
|
+
"src/components/research/StudyPanel.tsx",
|
|
68
|
+
"src/components/settings/AppearanceSettings.tsx",
|
|
69
|
+
"src/components/settings/BillingSettings.tsx",
|
|
70
|
+
"src/components/settings/ChannelsAdmin.tsx",
|
|
71
|
+
"src/components/settings/ChatSettings.tsx",
|
|
72
|
+
"src/components/settings/ClientManager.tsx",
|
|
73
|
+
"src/components/settings/DetailTabsEditor.tsx",
|
|
74
|
+
"src/components/settings/ListCTAsEditor.tsx",
|
|
75
|
+
"src/components/settings/NavSettings.tsx",
|
|
76
|
+
"src/components/settings/ProfileCompletionEditor.tsx",
|
|
77
|
+
"src/components/settings/RevenueSection.tsx",
|
|
78
|
+
"src/components/settings/TeamManager.tsx",
|
|
79
|
+
"src/components/sidebar/ClientsPane.tsx",
|
|
80
|
+
"src/components/sidebar/GroupSwitcherTree.tsx",
|
|
81
|
+
"src/components/sidebar/InvitesPane.tsx",
|
|
82
|
+
"src/components/studio/PlanBuilder.tsx",
|
|
83
|
+
"src/components/ui/EmptyCard.tsx",
|
|
84
|
+
"src/components/ui/animated-tooltip.tsx",
|
|
85
|
+
"src/components/ui/bounce-button.tsx",
|
|
86
|
+
"src/components/ui/kbd.tsx",
|
|
87
|
+
"src/components/ui/magnetic-button.tsx",
|
|
88
|
+
"src/components/ui/motion-checkbox.tsx",
|
|
89
|
+
"src/components/ui/motion-radio-group.tsx",
|
|
90
|
+
"src/components/ui/motion-switch.tsx",
|
|
91
|
+
"src/components/ui/motion-tabs.tsx",
|
|
92
|
+
"src/components/ui/navigation-menu.tsx",
|
|
93
|
+
"src/components/ui/pagination.tsx",
|
|
94
|
+
"src/components/ui/radio-group.tsx",
|
|
95
|
+
"src/components/ui/rating.tsx",
|
|
96
|
+
"src/components/ui/shimmer-button.tsx",
|
|
97
|
+
"src/components/views/OptionSelect.tsx",
|
|
98
|
+
"src/content.config.ts",
|
|
99
|
+
"src/engine/rubric.ts",
|
|
100
|
+
"src/hooks/use-inline-edit.ts",
|
|
101
|
+
"src/hooks/use-keyboard-shortcuts.ts",
|
|
102
|
+
"src/lib/ab.ts",
|
|
103
|
+
"src/lib/account-lockout.ts",
|
|
104
|
+
"src/lib/analytics/instruments.ts",
|
|
105
|
+
"src/lib/artifacts/a2a.ts",
|
|
106
|
+
"src/lib/artifacts/did.ts",
|
|
107
|
+
"src/lib/artifacts/erc8004.ts",
|
|
108
|
+
"src/lib/artifacts/mcp-server-json.ts",
|
|
109
|
+
"src/lib/artifacts/sigstore.ts",
|
|
110
|
+
"src/lib/auth-plugins/wallet-link.ts",
|
|
111
|
+
"src/lib/billing/index.ts",
|
|
112
|
+
"src/lib/blocks/render/chat.ts",
|
|
113
|
+
"src/lib/blocks/render/react.tsx",
|
|
114
|
+
"src/lib/booking-cta.ts",
|
|
115
|
+
"src/lib/branding.ts",
|
|
116
|
+
"src/lib/broadcast/serialize.ts",
|
|
117
|
+
"src/lib/campaign-notify.ts",
|
|
118
|
+
"src/lib/campaign-starters.ts",
|
|
119
|
+
"src/lib/campaign-touchpoints.ts",
|
|
120
|
+
"src/lib/can-delegate.ts",
|
|
121
|
+
"src/lib/cap-context.tsx",
|
|
122
|
+
"src/lib/cascade.ts",
|
|
123
|
+
"src/lib/competence/index.ts",
|
|
124
|
+
"src/lib/config.ts",
|
|
125
|
+
"src/lib/cro/abandonment.ts",
|
|
126
|
+
"src/lib/cro/disclosure.ts",
|
|
127
|
+
"src/lib/cro/friction.ts",
|
|
128
|
+
"src/lib/cro/social-proof.ts",
|
|
129
|
+
"src/lib/data/migrate.ts",
|
|
130
|
+
"src/lib/departments.ts",
|
|
131
|
+
"src/lib/dnd-rules.ts",
|
|
132
|
+
"src/lib/do-autonomous.ts",
|
|
133
|
+
"src/lib/foundation/derive.ts",
|
|
134
|
+
"src/lib/foundation/execute-skill.ts",
|
|
135
|
+
"src/lib/foundation/executor.ts",
|
|
136
|
+
"src/lib/funnel.ts",
|
|
137
|
+
"src/lib/funnel/attribution.ts",
|
|
138
|
+
"src/lib/funnel/segmentation.ts",
|
|
139
|
+
"src/lib/funnel/stats.ts",
|
|
140
|
+
"src/lib/gbp/alerts.ts",
|
|
141
|
+
"src/lib/gbp/cross-post.ts",
|
|
142
|
+
"src/lib/gbp/image-intake.ts",
|
|
143
|
+
"src/lib/gbp/strategy.ts",
|
|
144
|
+
"src/lib/generated/substrate-client.ts",
|
|
145
|
+
"src/lib/idempotency.ts",
|
|
146
|
+
"src/lib/in/channels.ts",
|
|
147
|
+
"src/lib/in/composer-submit.ts",
|
|
148
|
+
"src/lib/in/create-prompts.ts",
|
|
149
|
+
"src/lib/in/overview.ts",
|
|
150
|
+
"src/lib/in/writethrough.ts",
|
|
151
|
+
"src/lib/integrations/salesforce.ts",
|
|
152
|
+
"src/lib/journey.ts",
|
|
153
|
+
"src/lib/keyboard/defaults.ts",
|
|
154
|
+
"src/lib/learning/dream-source.ts",
|
|
155
|
+
"src/lib/notify/templates/magic-link.ts",
|
|
156
|
+
"src/lib/notify/templates/reset-password.ts",
|
|
157
|
+
"src/lib/notify/templates/verify-email.ts",
|
|
158
|
+
"src/lib/pagination.ts",
|
|
159
|
+
"src/lib/persona-prompts.ts",
|
|
160
|
+
"src/lib/pheromone.ts",
|
|
161
|
+
"src/lib/pick-delegate.ts",
|
|
162
|
+
"src/lib/problem.ts",
|
|
163
|
+
"src/lib/promises/contract.ts",
|
|
164
|
+
"src/lib/ptcorp-catalog.ts",
|
|
165
|
+
"src/lib/puck/chat-block-bound.ts",
|
|
166
|
+
"src/lib/puck/pickable-records.ts",
|
|
167
|
+
"src/lib/schema-version.ts",
|
|
168
|
+
"src/lib/shim.ts",
|
|
169
|
+
"src/lib/skill/discovery.ts",
|
|
170
|
+
"src/lib/social-schedule.ts",
|
|
171
|
+
"src/lib/ssr-logprob.ts",
|
|
172
|
+
"src/lib/starters.ts",
|
|
173
|
+
"src/lib/use-chat-nudge.ts",
|
|
174
|
+
"src/lib/use-segment.ts",
|
|
175
|
+
"src/lib/wallet-custody.ts",
|
|
176
|
+
"src/lib/wallet-master.ts",
|
|
177
|
+
"src/lib/well-known-door.ts",
|
|
178
|
+
"src/lib/workflow-flow.ts",
|
|
179
|
+
"src/lib/x402.ts"
|
|
180
|
+
],
|
|
181
|
+
"at": "2026-08-25"
|
|
182
|
+
}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* orphan-modules.mjs — every module under src/ must be reachable from something
|
|
4
|
+
* that is not a test.
|
|
5
|
+
*
|
|
6
|
+
* WHY THIS EXISTS. On 2026-08-26 an audit found that `693ba76b4` ("land nine
|
|
7
|
+
* fleets' work") took 35 of 70 files — keeping 12/19 tests but only 10/40
|
|
8
|
+
* source. Two failure modes came out of it:
|
|
9
|
+
*
|
|
10
|
+
* dropped CALLEE -> red test visible, three suites caught it
|
|
11
|
+
* dropped CALLER -> green test, dead INVISIBLE to every gate that existed
|
|
12
|
+
*
|
|
13
|
+
* The second is what this catches. `foundation/derive.ts`, `executor.ts` and
|
|
14
|
+
* `execute-skill.ts` all landed, all have passing tests, and NOTHING in src/
|
|
15
|
+
* imports any of them — their only caller was dropped. The suite went green
|
|
16
|
+
* over a dead feature. Measured: the test suite caught roughly a TENTH of the
|
|
17
|
+
* 28 missing files.
|
|
18
|
+
*
|
|
19
|
+
* The tempting check is test-import-integrity. The data refutes it: it misses
|
|
20
|
+
* the wallet case (master-wiring reads source as TEXT, so there are no imports
|
|
21
|
+
* to resolve) and it misses the foundation case (those imports resolve fine).
|
|
22
|
+
* Reachability is the property that actually distinguishes live from dead.
|
|
23
|
+
*
|
|
24
|
+
* SUBSTRING MATCHING IS NOT ENOUGH and was the first thing tried — grepping for
|
|
25
|
+
* `derive` matched 216 files. This resolves real import specifiers.
|
|
26
|
+
*
|
|
27
|
+
* node .claude/scripts/orphan-modules.mjs # report orphans
|
|
28
|
+
* node .claude/scripts/orphan-modules.mjs --check # exit 1 if any
|
|
29
|
+
* node .claude/scripts/orphan-modules.mjs --check-red # prove it can fail
|
|
30
|
+
*/
|
|
31
|
+
import { readFileSync, readdirSync, statSync, existsSync, writeFileSync, mkdtempSync, rmSync, mkdirSync } from 'node:fs'
|
|
32
|
+
import { join, resolve, dirname, relative, extname } from 'node:path'
|
|
33
|
+
import { tmpdir } from 'node:os'
|
|
34
|
+
|
|
35
|
+
const MODE = process.argv[2] ?? ''
|
|
36
|
+
|
|
37
|
+
// Entry points are reached by the FRAMEWORK, not by an import, so an
|
|
38
|
+
// un-imported one is correct rather than orphaned. Getting this list wrong in
|
|
39
|
+
// the permissive direction hides real orphans; wrong in the strict direction
|
|
40
|
+
// produces noise nobody will read. Keep it narrow and justified.
|
|
41
|
+
const ENTRY = [
|
|
42
|
+
/^src\/pages\//, // Astro routes + API routes
|
|
43
|
+
/^src\/middleware\.ts$/, // Astro middleware
|
|
44
|
+
/^src\/workers\//, // CF worker entry points
|
|
45
|
+
/^src\/env\.d\.ts$/,
|
|
46
|
+
/^src\/types\//, // ambient/type-only, erased at runtime
|
|
47
|
+
/^src\/content\//, // content collections
|
|
48
|
+
/^src\/styles\//,
|
|
49
|
+
]
|
|
50
|
+
const SRC_EXT = new Set(['.ts', '.tsx', '.astro', '.mjs'])
|
|
51
|
+
|
|
52
|
+
function walk(dir, out = []) {
|
|
53
|
+
for (const e of readdirSync(dir)) {
|
|
54
|
+
if (e === 'node_modules' || e === 'dist' || e.startsWith('.')) continue
|
|
55
|
+
const p = join(dir, e)
|
|
56
|
+
if (statSync(p).isDirectory()) walk(p, out)
|
|
57
|
+
else if (SRC_EXT.has(extname(e))) out.push(p)
|
|
58
|
+
}
|
|
59
|
+
return out
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// Import specifiers: static imports, `export ... from`, dynamic import(), and
|
|
63
|
+
// Astro frontmatter (which is just TS between the fences).
|
|
64
|
+
const SPEC_RE = /(?:import|export)\s[^;]*?from\s*['"]([^'"]+)['"]|import\s*\(\s*['"]([^'"]+)['"]\s*\)|import\s*['"]([^'"]+)['"]/g
|
|
65
|
+
|
|
66
|
+
function specifiersOf(file) {
|
|
67
|
+
const src = readFileSync(file, 'utf8')
|
|
68
|
+
const out = []
|
|
69
|
+
for (const m of src.matchAll(SPEC_RE)) out.push(m[1] ?? m[2] ?? m[3])
|
|
70
|
+
return out.filter(Boolean)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/** Resolve a specifier to a real file, honouring the `@/` alias and extensionless imports. */
|
|
74
|
+
function resolveSpec(spec, fromFile, root) {
|
|
75
|
+
let base
|
|
76
|
+
if (spec.startsWith('@/')) base = join(root, 'src', spec.slice(2))
|
|
77
|
+
else if (spec.startsWith('.')) base = resolve(dirname(fromFile), spec)
|
|
78
|
+
else return null // bare package
|
|
79
|
+
// TS lets you write .js for a .ts file
|
|
80
|
+
const stripped = base.replace(/\.js$/, '')
|
|
81
|
+
for (const c of [base, stripped,
|
|
82
|
+
...['.ts', '.tsx', '.astro', '.mjs'].flatMap(e => [stripped + e, join(stripped, 'index' + e)])]) {
|
|
83
|
+
if (existsSync(c) && statSync(c).isFile()) return c
|
|
84
|
+
}
|
|
85
|
+
return null
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function analyse(root) {
|
|
89
|
+
const files = walk(join(root, 'src'))
|
|
90
|
+
const rel = f => relative(root, f).split('\\').join('/')
|
|
91
|
+
const isTest = f => /\.(test|spec)\.[tj]sx?$/.test(f) || rel(f).includes('/tests/')
|
|
92
|
+
const isEntry = f => ENTRY.some(re => re.test(rel(f)))
|
|
93
|
+
|
|
94
|
+
// Reached by a NON-TEST file. A module imported only by its own test is
|
|
95
|
+
// exactly the dead-feature shape, so tests must not count as reachability.
|
|
96
|
+
const reached = new Set()
|
|
97
|
+
for (const f of files) {
|
|
98
|
+
if (isTest(f)) continue
|
|
99
|
+
for (const s of specifiersOf(f)) {
|
|
100
|
+
const t = resolveSpec(s, f, root)
|
|
101
|
+
if (t && t !== f) reached.add(t)
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
const orphans = files.filter(f => !isTest(f) && !isEntry(f) && !reached.has(f)).map(rel).sort()
|
|
105
|
+
return { total: files.length, orphans }
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// ── --check-red: prove the checker can fail ──────────────────────────────────
|
|
109
|
+
// A checker you have only ever seen pass is not evidence (doctrine: prove RED).
|
|
110
|
+
if (MODE === '--check-red') {
|
|
111
|
+
const tmp = mkdtempSync(join(tmpdir(), 'orphan-red-'))
|
|
112
|
+
try {
|
|
113
|
+
const s = join(tmp, 'src')
|
|
114
|
+
for (const d of ['lib', 'pages']) mkdirSync(join(s, d), { recursive: true })
|
|
115
|
+
writeFileSync(join(s, 'lib', 'used.ts'), 'export const a = 1\n')
|
|
116
|
+
writeFileSync(join(s, 'lib', 'orphan.ts'), 'export const b = 2\n')
|
|
117
|
+
writeFileSync(join(s, 'pages', 'index.astro'), '---\nimport { a } from "@/lib/used"\n---\n<p>{a}</p>\n')
|
|
118
|
+
let fails = 0
|
|
119
|
+
const r1 = analyse(tmp)
|
|
120
|
+
if (r1.orphans.includes('src/lib/orphan.ts')) console.log(' arm orphan present caught')
|
|
121
|
+
else { console.log(' arm orphan present MISSED'); fails++ }
|
|
122
|
+
if (!r1.orphans.includes('src/lib/used.ts')) console.log(' arm used module not flagged (correct)')
|
|
123
|
+
else { console.log(' arm used module FALSE POSITIVE'); fails++ }
|
|
124
|
+
if (!r1.orphans.includes('src/pages/index.astro')) console.log(' arm entry point exempt (correct)')
|
|
125
|
+
else { console.log(' arm entry point FALSE POSITIVE'); fails++ }
|
|
126
|
+
// a module imported ONLY by a test is still an orphan — the whole point
|
|
127
|
+
writeFileSync(join(s, 'lib', 'testonly.ts'), 'export const c = 3\n')
|
|
128
|
+
mkdirSync(join(tmp, 'tests'), { recursive: true })
|
|
129
|
+
writeFileSync(join(tmp, 'tests', 'x.test.ts'), 'import { c } from "@/lib/testonly"\n')
|
|
130
|
+
const r2 = analyse(tmp)
|
|
131
|
+
if (r2.orphans.includes('src/lib/testonly.ts')) console.log(' arm test-only import caught (the dead-feature shape)')
|
|
132
|
+
else { console.log(' arm test-only import MISSED — this is the shape it exists for'); fails++ }
|
|
133
|
+
console.log(fails === 0
|
|
134
|
+
? 'check-red: all four arms behaved — the checker CAN go red, and does not cry wolf'
|
|
135
|
+
: `check-red: ${fails} assertion(s) failed`)
|
|
136
|
+
process.exit(fails === 0 ? 0 : 1)
|
|
137
|
+
} finally { rmSync(tmp, { recursive: true, force: true }) }
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
const root = resolve(process.argv.includes('--root')
|
|
141
|
+
? process.argv[process.argv.indexOf('--root') + 1]
|
|
142
|
+
: join(dirname(new URL(import.meta.url).pathname), '..', '..', 'one.ie', 'web'))
|
|
143
|
+
|
|
144
|
+
if (!existsSync(join(root, 'src'))) {
|
|
145
|
+
console.error(`orphan-modules: no src/ at ${root} — this is UNMEASURED, not ok`)
|
|
146
|
+
process.exit(2)
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
const { total, orphans } = analyse(root)
|
|
150
|
+
console.log(`orphan-modules: ${total} files scanned, ${orphans.length} orphan(s)`)
|
|
151
|
+
for (const o of orphans) console.log(` ${o}`)
|
|
152
|
+
// A RATCHET, not a hard gate. 178 orphans exist today and some are reached in
|
|
153
|
+
// ways this resolver cannot see (a registry map, a Puck block table, a string
|
|
154
|
+
// key). Gating on zero would cry wolf on day one and be muted by day three.
|
|
155
|
+
// Gating on "no NEW orphan" is the same monotonic shape /do already runs: the
|
|
156
|
+
// count can only fall. That is what catches the next dropped caller.
|
|
157
|
+
const BASELINE = join(dirname(new URL(import.meta.url).pathname), 'orphan-baseline.json')
|
|
158
|
+
if (MODE === '--check') {
|
|
159
|
+
let base = { count: Infinity, files: [] }
|
|
160
|
+
if (existsSync(BASELINE)) base = JSON.parse(readFileSync(BASELINE, 'utf8'))
|
|
161
|
+
const known = new Set(base.files ?? [])
|
|
162
|
+
const fresh = orphans.filter(o => !known.has(o))
|
|
163
|
+
if (fresh.length) {
|
|
164
|
+
console.log(`\nRED — ${fresh.length} NEW orphan(s) since the baseline:`)
|
|
165
|
+
for (const f of fresh) console.log(` + ${f}`)
|
|
166
|
+
console.log('\nA new orphan means a module landed with no caller — the shape that')
|
|
167
|
+
console.log('dropped 28 files on 2026-08-26 and showed GREEN the whole time.')
|
|
168
|
+
console.log('Wire it, delete it, or add it to ENTRY with a reason.')
|
|
169
|
+
process.exit(1)
|
|
170
|
+
}
|
|
171
|
+
if (orphans.length < base.count) {
|
|
172
|
+
console.log(`ratchet ROSE: ${base.count} -> ${orphans.length}. Re-baseline with --baseline.`)
|
|
173
|
+
}
|
|
174
|
+
console.log(`ok — no new orphans (baseline ${base.count})`)
|
|
175
|
+
}
|
|
176
|
+
if (MODE === '--baseline') {
|
|
177
|
+
writeFileSync(BASELINE, JSON.stringify({ count: orphans.length, files: orphans, at: new Date().toISOString().slice(0,10) }, null, 2) + '\n')
|
|
178
|
+
console.log(`baseline written: ${orphans.length} orphan(s)`)
|
|
179
|
+
}
|