@rosh100yx/outlier 0.4.2 → 0.4.10
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/README.md +23 -19
- package/bin/outlier.js +168 -40
- package/bin/postinstall.js +17 -0
- package/package.json +4 -2
- package/src/cli.ts +117 -47
package/README.md
CHANGED
|
@@ -4,20 +4,17 @@
|
|
|
4
4
|
<p><b>The Governance & Policy Engine for AI Engineering</b></p>
|
|
5
5
|
<p><i>Measure AI adoption. Enforce Zero-Trust. Protect Human Mastery.</i></p>
|
|
6
6
|
<br/>
|
|
7
|
-
<a href="https://github.com/rosh100yx/outlier/issues/new?assignees=&labels=enhancement&projects=&template=feature_request.md&title=%5BFEATURE%5D+">
|
|
8
|
-
<img src="https://img.shields.io/badge/%E2%9C%A8_Feature_Request-Submit_an_idea-blueviolet?style=for-the-badge&logo=github" alt="Feature Request" />
|
|
9
|
-
</a>
|
|
10
7
|
|
|
11
8
|
<p>
|
|
12
9
|
<img src="https://img.shields.io/badge/Compliance-Strict-blue?style=for-the-badge" />
|
|
13
10
|
<img src="https://img.shields.io/badge/AI_Safety-Enabled-green?style=for-the-badge" />
|
|
14
11
|
<img src="https://img.shields.io/badge/Zero_Trust-Verified-orange?style=for-the-badge" />
|
|
15
|
-
<img src="https://img.shields.io/badge/Carbon_Footprint-Tracked-lightgrey?style=for-the-badge" />
|
|
16
12
|
</p>
|
|
17
13
|
|
|
18
14
|
<p>
|
|
19
15
|
<b>Get Started Instantly:</b><br/>
|
|
20
|
-
<code>
|
|
16
|
+
<code>npm install -g @rosh100yx/outlier</code><br/>
|
|
17
|
+
<code>outlier status</code>
|
|
21
18
|
</p>
|
|
22
19
|
|
|
23
20
|
<br/>
|
|
@@ -25,20 +22,6 @@
|
|
|
25
22
|
<br/>
|
|
26
23
|
</div>
|
|
27
24
|
|
|
28
|
-
`outlier` is an open-source, local-first policy engine and governance framework designed to measure the true cost and risk of AI code generation. As teams accelerate with LLM agents (Cursor, Copilot, Claude Code), `outlier` acts as the definitive **Bouncer**—auditing AI authorship, mitigating deskilling risks, and tracking regional carbon footprints entirely locally.
|
|
29
|
-
|
|
30
|
-
**Our Moat:**
|
|
31
|
-
1. **Zero-Trust & Local-First:** No API keys, no telemetry sent to the cloud. `outlier` reads your native `~/.claude/` session logs and `.git/` history directly on your machine.
|
|
32
|
-
2. **Actionable Policy Engine:** We don't just build dashboards. `outlier` lives in your terminal and CI/CD pipelines (via pre-commit hooks and GitHub Actions), physically blocking risky or overly AI-reliant commits.
|
|
33
|
-
3. **Counterfactual Carbon Accounting:** The only observability tool mapping token cache waste directly to your local energy grid (e.g., Global South vs EU), proving true environmental impacts.
|
|
34
|
-
4. **Anti-Deskilling Guardrails:** Built to prevent developers from becoming mere spectators in their own codebase.
|
|
35
|
-
|
|
36
|
-
> *"In a room full of agents" shifts the perspective. It acknowledges that the developer is no longer a solo coder; they are a manager of bots. The product exists to make sure the human doesn't get lazy while managing them. We all want our time back, but we don't want to lose control of the craft.*
|
|
37
|
-
|
|
38
|
-
<div align="center">
|
|
39
|
-
<img src="https://raw.githubusercontent.com/rosh100yx/outlier/main/assets/codecore.gif" alt="Codecore Aesthetic" width="300" />
|
|
40
|
-
</div>
|
|
41
|
-
|
|
42
25
|
## How It Works
|
|
43
26
|
```text
|
|
44
27
|
┌───────────┐ ┌────────────┐ ┌───────────┐ ┌─────────────┐
|
|
@@ -130,5 +113,26 @@ This tool is the technical implementation of an ongoing academic thesis on the t
|
|
|
130
113
|
|
|
131
114
|
See our [Contributing Guide](CONTRIBUTING.md) to get started. Great first issues include adding new regional grid factors to `data/grid-factors.json` or writing custom CI/CD pipeline integrations.
|
|
132
115
|
|
|
116
|
+
## The Compounding Horizon of AI Deskilling
|
|
117
|
+
|
|
118
|
+
When you use an AI agent to skip the boring stuff today, it feels amazing. You get your time back. But what happens over the next 5 to 10 years?
|
|
119
|
+
|
|
120
|
+
<div align="center">
|
|
121
|
+
<img src="https://raw.githubusercontent.com/rosh100yx/outlier/main/assets/metr-long-tasks.png" alt="METR Graph" width="350" />
|
|
122
|
+
<p><i>Source: METR (Measuring AI Ability to Complete Long Tasks)</i></p>
|
|
123
|
+
</div>
|
|
124
|
+
|
|
125
|
+
### What Does This Mean For Developers?
|
|
126
|
+
- **Today (The 5-minute task):** You gain speed. You lose the muscle memory of writing low-level code.
|
|
127
|
+
- **Tomorrow (The 5-hour task):** Agents will solve complex tickets across multiple files. You gain massive scale. You lose the deep, intimate understanding of your own system's architecture.
|
|
128
|
+
- **Next 5-10 Years (The 1M+ LOC Crisis):** When an agent introduces a critical bug in a massive codebase, human reviewers will lack the deeply ingrained "systems thinking" required to debug it.
|
|
129
|
+
|
|
130
|
+
### Why This Project Exists
|
|
131
|
+
`outlier` is the technical circuit breaker that forces developers to stay sharp. We measure the exact cost of AI for humans—not just in API tokens burnt, but in cognitive load and lost mastery.
|
|
132
|
+
|
|
133
|
+
<div align="center">
|
|
134
|
+
<img src="https://raw.githubusercontent.com/rosh100yx/outlier/main/assets/codecore.gif" alt="Codecore Aesthetic" width="300" />
|
|
135
|
+
</div>
|
|
136
|
+
|
|
133
137
|
## License
|
|
134
138
|
MIT License
|
package/bin/outlier.js
CHANGED
|
@@ -161,6 +161,63 @@ var require_picocolors = __commonJS((exports, module) => {
|
|
|
161
161
|
module.exports.createColors = createColors;
|
|
162
162
|
});
|
|
163
163
|
|
|
164
|
+
// package.json
|
|
165
|
+
var require_package = __commonJS((exports, module) => {
|
|
166
|
+
module.exports = {
|
|
167
|
+
name: "@rosh100yx/outlier",
|
|
168
|
+
version: "0.4.10",
|
|
169
|
+
description: "AI Code Governance & Capability Auditing for the Terminal. Measures AI reliance, context waste, and enforces local CI/CD policies.",
|
|
170
|
+
bin: {
|
|
171
|
+
outlier: "bin/outlier.js"
|
|
172
|
+
},
|
|
173
|
+
files: [
|
|
174
|
+
"bin/outlier.js",
|
|
175
|
+
"bin/postinstall.js",
|
|
176
|
+
"src",
|
|
177
|
+
"data"
|
|
178
|
+
],
|
|
179
|
+
scripts: {
|
|
180
|
+
build: "bun build ./src/cli.ts --target=node --outfile bin/outlier.js",
|
|
181
|
+
test: "bun test",
|
|
182
|
+
start: "bun run src/cli.ts",
|
|
183
|
+
postinstall: "node bin/postinstall.js"
|
|
184
|
+
},
|
|
185
|
+
type: "module",
|
|
186
|
+
private: false,
|
|
187
|
+
author: "Roshan Abraham",
|
|
188
|
+
license: "MIT",
|
|
189
|
+
repository: {
|
|
190
|
+
type: "git",
|
|
191
|
+
url: "https://github.com/rosh100yx/outlier.git"
|
|
192
|
+
},
|
|
193
|
+
keywords: [
|
|
194
|
+
"ai",
|
|
195
|
+
"governance",
|
|
196
|
+
"carbon",
|
|
197
|
+
"compliance",
|
|
198
|
+
"ai-safety",
|
|
199
|
+
"policy-engine",
|
|
200
|
+
"zero-trust",
|
|
201
|
+
"carbon-footprint",
|
|
202
|
+
"global-south",
|
|
203
|
+
"observability",
|
|
204
|
+
"telemetry",
|
|
205
|
+
"authorship",
|
|
206
|
+
"cli"
|
|
207
|
+
],
|
|
208
|
+
devDependencies: {
|
|
209
|
+
"@types/bun": "latest"
|
|
210
|
+
},
|
|
211
|
+
peerDependencies: {
|
|
212
|
+
typescript: "^5"
|
|
213
|
+
},
|
|
214
|
+
dependencies: {
|
|
215
|
+
"@clack/prompts": "^1.6.0",
|
|
216
|
+
picocolors: "^1.1.1"
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
});
|
|
220
|
+
|
|
164
221
|
// node_modules/@clack/core/dist/index.mjs
|
|
165
222
|
import { styleText } from "node:util";
|
|
166
223
|
import { stdout, stdin } from "node:process";
|
|
@@ -1932,7 +1989,8 @@ The results will assign you a "vibe" and evaluate if you are at risk of deskilli
|
|
|
1932
1989
|
async function main() {
|
|
1933
1990
|
console.clear();
|
|
1934
1991
|
console.log(import_picocolors.default.cyan(ASCII_LOGO));
|
|
1935
|
-
|
|
1992
|
+
const pkg = require_package();
|
|
1993
|
+
console.log(import_picocolors.default.dim(` Outlier v${pkg.version} · AI Code Reliance & Telemetry Engine
|
|
1936
1994
|
`));
|
|
1937
1995
|
let action = process.argv[2];
|
|
1938
1996
|
if (action === "--help" || action === "-h" || action === "help") {
|
|
@@ -1943,7 +2001,9 @@ COMMANDS:`));
|
|
|
1943
2001
|
console.log(` ${import_picocolors.default.cyan("outlier authorship")} Scan git history for AI co-authorship ratio`);
|
|
1944
2002
|
console.log(` ${import_picocolors.default.cyan("outlier carbon")} Scan local logs for token waste & carbon cost`);
|
|
1945
2003
|
console.log(` ${import_picocolors.default.cyan("outlier policy")} Configure CI/CD guardrails and thresholds`);
|
|
1946
|
-
console.log(` ${import_picocolors.default.cyan("outlier
|
|
2004
|
+
console.log(` ${import_picocolors.default.cyan("outlier impact")} See the compounding horizon of AI Deskilling`);
|
|
2005
|
+
console.log(` ${import_picocolors.default.cyan("outlier knowledge")} Explore references, graphs, and the core literature`);
|
|
2006
|
+
console.log(` ${import_picocolors.default.cyan("outlier participate")} Help build the academic literature on AI deskilling`);
|
|
1947
2007
|
console.log(`
|
|
1948
2008
|
` + import_picocolors.default.dim("Run without arguments to start the interactive wizard."));
|
|
1949
2009
|
process.exit(0);
|
|
@@ -1964,7 +2024,9 @@ COMMANDS:`));
|
|
|
1964
2024
|
{ value: "authorship", label: "Code Durability", hint: "Scan git history for AI Code Reliance & Hallucination Risk" },
|
|
1965
2025
|
{ value: "carbon", label: "Cache Bloat", hint: "Scan local logs for context waste & token costs" },
|
|
1966
2026
|
{ value: "policy", label: "Policy Profiles", hint: "Set Personal, Team, or Enterprise guardrails in CI" },
|
|
1967
|
-
{ value: "
|
|
2027
|
+
{ value: "impact", label: "Impact Horizon", hint: "What do you lose and gain in the next 5-10 years?" },
|
|
2028
|
+
{ value: "knowledge", label: "Literature Base", hint: "Explore references and the core academic foundation" },
|
|
2029
|
+
{ value: "participate", label: "Participate", hint: "Contribute to the literature on AI deskilling" }
|
|
1968
2030
|
]
|
|
1969
2031
|
});
|
|
1970
2032
|
if (isCancel(action)) {
|
|
@@ -2110,6 +2172,74 @@ ${costIcon}${import_picocolors.default.dim("[3] Tokenomics & Cost")} ${import_pi
|
|
|
2110
2172
|
waste: ${import_picocolors.default.yellow(`⚠ ${cachePct}% of tokens are redundant context reads`)}
|
|
2111
2173
|
carbon: ${import_picocolors.default.green(`✓ ${co2Str} (Est. ${regionStr} Grid)`)}
|
|
2112
2174
|
${import_picocolors.default.bold("Governance:")} ${ruleFailures > 0 ? import_picocolors.default.red(`${failIcon} ${ruleFailures + 1} policy failures`) : import_picocolors.default.green(`${passIcon} All clear`)}`, `${import_picocolors.default.bold("[outlier]")} ${5 - (ruleFailures + 1)}/5 policies • ${authWarning || import_picocolors.default.green(`${passIcon} safe surface`)} • ${co2Str}`);
|
|
2175
|
+
const timestamp = new Date().toISOString().split("T")[0];
|
|
2176
|
+
const isDanger = gitStats && gitStats.ratio > 0.7;
|
|
2177
|
+
const verdictZone = isDanger ? import_picocolors.default.red("DANGER ZONE") : import_picocolors.default.green("SAFE / SOVEREIGN");
|
|
2178
|
+
const verdictText = isDanger ? `You are transitioning from 'Creator' to 'Reviewer'.
|
|
2179
|
+
At this trajectory, you risk losing architectural
|
|
2180
|
+
muscle memory on this codebase within 6 months.` : `You are maintaining strong architectural intimacy.
|
|
2181
|
+
Your human judgement remains the primary driver
|
|
2182
|
+
of logic in this system.`;
|
|
2183
|
+
const isInefficient = parseFloat(cachePct) > 40;
|
|
2184
|
+
const cacheVerdict = isInefficient ? import_picocolors.default.yellow("INEFFICIENT") : import_picocolors.default.green("EFFICIENT");
|
|
2185
|
+
const cacheText = isInefficient ? `You are burning paid API tokens and excess compute
|
|
2186
|
+
on files the agent isn't even touching.` : `Your token usage and human judgment are tightly
|
|
2187
|
+
coupled. High signal-to-noise ratio.`;
|
|
2188
|
+
const policyStatus = ruleFailures > 0 ? import_picocolors.default.red("BLOCKED \uD83D\uDED1 (Threshold Exceeded)") : import_picocolors.default.green("PASS ✅ (Within Threshold)");
|
|
2189
|
+
const policyAction = ruleFailures > 0 ? "Triggering Mandatory Mentoring Scenario." : "No intervention required.";
|
|
2190
|
+
const totalTokensStr = carbon ? (carbon.totalTokens / 1000).toFixed(1) + "k" : "0";
|
|
2191
|
+
const humanSov = gitStats ? ((1 - gitStats.ratio) * 100).toFixed(1) + "%" : "100%";
|
|
2192
|
+
const authorshipStr = authPct + (isDanger ? import_picocolors.default.red(" (High Reliance)") : import_picocolors.default.green(" (Healthy)"));
|
|
2193
|
+
const getProgressBar = (pct, length = 10) => {
|
|
2194
|
+
const filled = Math.max(0, Math.min(length, Math.round(pct / 100 * length)));
|
|
2195
|
+
return "▰".repeat(filled) + "▱".repeat(length - filled);
|
|
2196
|
+
};
|
|
2197
|
+
const aiPctVal = gitStats ? gitStats.ratio * 100 : 0;
|
|
2198
|
+
const aiBar = import_picocolors.default.yellow(getProgressBar(aiPctVal));
|
|
2199
|
+
const humanBar = import_picocolors.default.cyan(getProgressBar(100 - aiPctVal));
|
|
2200
|
+
const cacheBar = import_picocolors.default.magenta(getProgressBar(parseFloat(cachePct) || 0));
|
|
2201
|
+
if (!isStrict) {
|
|
2202
|
+
const dateStr = new Date().toLocaleDateString("en-US", { month: "short", day: "2-digit", year: "numeric" }).toUpperCase();
|
|
2203
|
+
const timeStr = new Date().toLocaleTimeString("en-US", { hour12: false });
|
|
2204
|
+
const repoName = process.cwd().split("/").pop() || "Unknown";
|
|
2205
|
+
console.log(`
|
|
2206
|
+
${import_picocolors.default.dim("┌────────────────────────────────────────────────────────")}
|
|
2207
|
+
${import_picocolors.default.dim("│")} ${import_picocolors.default.cyan("█▀█ █░█ ▀█▀ █░░ █ █▀▀ █▀█")} ${import_picocolors.default.bold(":: THERMAL AUDIT RECEIPT")}
|
|
2208
|
+
${import_picocolors.default.dim("│")} ${import_picocolors.default.cyan("█▄█ █▄█ ░█░ █▄▄ █ ██▄ █▀▄")} ${import_picocolors.default.dim(`:: TIMESTAMP: ${dateStr}`)}
|
|
2209
|
+
${import_picocolors.default.dim("├────────────────────────────────────────────────────────")}
|
|
2210
|
+
${import_picocolors.default.dim("│")} ${import_picocolors.default.bold(import_picocolors.default.bgBlue(" [ COGNITIVE BUDGET ] "))}
|
|
2211
|
+
${import_picocolors.default.dim("│")} AI Authorship ................. ${aiBar} ${authorshipStr}
|
|
2212
|
+
${import_picocolors.default.dim("│")} Human Sovereignty ................. ${humanBar} ${humanSov}
|
|
2213
|
+
${import_picocolors.default.dim("│")}
|
|
2214
|
+
${import_picocolors.default.dim("│")} ↳ Verdict: ${verdictZone}
|
|
2215
|
+
${import_picocolors.default.dim("│")} ${verdictText.split(`
|
|
2216
|
+
`).join(`
|
|
2217
|
+
` + import_picocolors.default.dim("│") + " ")}
|
|
2218
|
+
${import_picocolors.default.dim("├────────────────────────────────────────────────────────")}
|
|
2219
|
+
${import_picocolors.default.dim("│")} ${import_picocolors.default.bold(import_picocolors.default.bgMagenta(" [ FINANCIAL & COMPUTE TOLL ] "))}
|
|
2220
|
+
${import_picocolors.default.dim("│")} Tokens Burnt ................. ${totalTokensStr} vs Human Judgment
|
|
2221
|
+
${import_picocolors.default.dim("│")} Cache Bloat ................. ${cacheBar} ${cachePct}% (Unmodified context)
|
|
2222
|
+
${import_picocolors.default.dim("│")} Regional Grid ................. ${regionStr}
|
|
2223
|
+
${import_picocolors.default.dim("│")}
|
|
2224
|
+
${import_picocolors.default.dim("│")} ↳ Verdict: ${cacheVerdict}
|
|
2225
|
+
${import_picocolors.default.dim("│")} ${cacheText.split(`
|
|
2226
|
+
`).join(`
|
|
2227
|
+
` + import_picocolors.default.dim("│") + " ")}
|
|
2228
|
+
${import_picocolors.default.dim("├────────────────────────────────────────────────────────")}
|
|
2229
|
+
${import_picocolors.default.dim("│")} ${import_picocolors.default.bold(import_picocolors.default.bgYellow(import_picocolors.default.black(" [ POLICY ENFORCEMENT ] ")))}
|
|
2230
|
+
${import_picocolors.default.dim("│")} Status .................................. ${policyStatus}
|
|
2231
|
+
${import_picocolors.default.dim("│")} Action .................................. ${policyAction}
|
|
2232
|
+
${import_picocolors.default.dim("├────────────────────────────────────────────────────────")}
|
|
2233
|
+
${import_picocolors.default.dim("│")}
|
|
2234
|
+
${import_picocolors.default.dim("│")} ${import_picocolors.default.italic(import_picocolors.default.dim("patterns emerge in the commit history,"))}
|
|
2235
|
+
${import_picocolors.default.dim("│")} ${import_picocolors.default.italic(import_picocolors.default.dim("code becomes commoditized by algorithms."))}
|
|
2236
|
+
${import_picocolors.default.dim("│")} ${import_picocolors.default.italic(import_picocolors.default.dim("human mastery is the only true moat."))}
|
|
2237
|
+
${import_picocolors.default.dim("│")}
|
|
2238
|
+
${import_picocolors.default.dim("│")} ${import_picocolors.default.bold(import_picocolors.default.cyan("***STAY VIGILANT***"))}
|
|
2239
|
+
${import_picocolors.default.dim("└────────────────────────────────────────────────────────")}`);
|
|
2240
|
+
} else {
|
|
2241
|
+
note(`status: ${authPct} AI Reliance | ${cachePct}% Cache Bloat | ${co2Str}`, `${import_picocolors.default.bold("[outlier]")} CI/CD Audit`);
|
|
2242
|
+
}
|
|
2113
2243
|
} catch (e) {
|
|
2114
2244
|
s.stop("Audit failed");
|
|
2115
2245
|
console.error(import_picocolors.default.red(e.message));
|
|
@@ -2217,8 +2347,8 @@ Status: ${import_picocolors.default.green("Compliant - Human oversight log
|
|
|
2217
2347
|
Privacy: ${import_picocolors.default.green("Preserved - No citizen data exported")}
|
|
2218
2348
|
Artifact: ${import_picocolors.default.cyan(reportPath)}`, "Regulatory Compliance");
|
|
2219
2349
|
}
|
|
2220
|
-
} else if (action === "
|
|
2221
|
-
s.start("Connecting to the
|
|
2350
|
+
} else if (action === "participate") {
|
|
2351
|
+
s.start("Connecting to the Outlier research project...");
|
|
2222
2352
|
await new Promise((resolve) => setTimeout(resolve, 600));
|
|
2223
2353
|
s.stop("Secure connection established.");
|
|
2224
2354
|
const q1 = await select({
|
|
@@ -2230,7 +2360,7 @@ Artifact: ${import_picocolors.default.cyan(reportPath)}`, "Regulatory Compli
|
|
|
2230
2360
|
]
|
|
2231
2361
|
});
|
|
2232
2362
|
if (isCancel(q1)) {
|
|
2233
|
-
cancel("
|
|
2363
|
+
cancel("Survey aborted.");
|
|
2234
2364
|
process.exit(0);
|
|
2235
2365
|
}
|
|
2236
2366
|
const q2 = await select({
|
|
@@ -2242,7 +2372,7 @@ Artifact: ${import_picocolors.default.cyan(reportPath)}`, "Regulatory Compli
|
|
|
2242
2372
|
]
|
|
2243
2373
|
});
|
|
2244
2374
|
if (isCancel(q2)) {
|
|
2245
|
-
cancel("
|
|
2375
|
+
cancel("Survey aborted.");
|
|
2246
2376
|
process.exit(0);
|
|
2247
2377
|
}
|
|
2248
2378
|
const feedback = await text({
|
|
@@ -2251,62 +2381,60 @@ Artifact: ${import_picocolors.default.cyan(reportPath)}`, "Regulatory Compli
|
|
|
2251
2381
|
placeholder: "Honestly, I just let the agent write the regex...",
|
|
2252
2382
|
validate(value) {
|
|
2253
2383
|
if (!value || value.length === 0)
|
|
2254
|
-
return `C'mon,
|
|
2384
|
+
return `C'mon, say something!`;
|
|
2255
2385
|
}
|
|
2256
2386
|
});
|
|
2257
2387
|
if (isCancel(feedback)) {
|
|
2258
|
-
cancel("
|
|
2388
|
+
cancel("Survey aborted.");
|
|
2259
2389
|
process.exit(0);
|
|
2260
2390
|
}
|
|
2261
2391
|
note(`${import_picocolors.default.italic(`"${feedback}"`)}
|
|
2262
2392
|
|
|
2263
|
-
Your
|
|
2393
|
+
Your input is invaluable. To make it official and contribute to the literature, we've generated a secure transmission link for you.`, "Outlier Research");
|
|
2264
2394
|
const surveyData = `**Engineering Reality:** ${q1}
|
|
2265
2395
|
**Deskilling Impact:** ${q2}
|
|
2266
2396
|
**Thoughts:**
|
|
2267
2397
|
${feedback}`;
|
|
2268
|
-
const url = `https://github.com/rosh100yx/outlier/issues/new?assignees=&labels=enhancement&projects=&template=feature_request.md&title=%
|
|
2398
|
+
const url = `https://github.com/rosh100yx/outlier/issues/new?assignees=&labels=enhancement&projects=&template=feature_request.md&title=%5BOutlier+Research%5D+Feedback&body=${encodeURIComponent(`Drop a screenshot of your Thermal Receipt here!
|
|
2269
2399
|
|
|
2270
2400
|
` + surveyData)}`;
|
|
2271
2401
|
console.log(`
|
|
2272
2402
|
${import_picocolors.default.bold("Submit here (and drop your screenshot!):")} ${import_picocolors.default.underline(import_picocolors.default.cyan(url))}
|
|
2273
2403
|
`);
|
|
2274
|
-
}
|
|
2275
|
-
outro("Local telemetry run completed. No data left your machine.");
|
|
2276
|
-
if (action === "status" || action === "authorship" || action === "carbon") {
|
|
2277
|
-
const d = new Date;
|
|
2278
|
-
const dateStr = d.toLocaleDateString("en-US", { month: "short", day: "2-digit", year: "numeric" }).toUpperCase();
|
|
2279
|
-
const timeStr = d.toLocaleTimeString("en-US", { hour12: false });
|
|
2280
|
-
let repoName = process.cwd().split("/").pop() || "Unknown";
|
|
2281
|
-
console.log(`
|
|
2282
|
-
${import_picocolors.default.dim("-------------------------")} ${import_picocolors.default.bold("AUDIT RECEIPT")} ${import_picocolors.default.dim("-------------------------")}`);
|
|
2404
|
+
} else if (action === "impact") {
|
|
2283
2405
|
console.log(`
|
|
2284
|
-
|
|
2285
|
-
console.log(` Timestamp ${import_picocolors.default.dim(`${dateStr} ${timeStr}`)}
|
|
2406
|
+
` + import_picocolors.default.bold(import_picocolors.default.bgMagenta(" THE COMPOUNDING HORIZON OF DESKILLING ")) + `
|
|
2286
2407
|
`);
|
|
2287
|
-
console.log(
|
|
2288
|
-
console.log(
|
|
2289
|
-
console.log(`
|
|
2290
|
-
console.log(`
|
|
2408
|
+
console.log(import_picocolors.default.bold("What Do We Lose and Gain?"));
|
|
2409
|
+
console.log(import_picocolors.default.cyan("■ Today (The 5-minute task)"));
|
|
2410
|
+
console.log(` ${import_picocolors.default.green("Gain:")} Velocity. AI scaffolds your components.`);
|
|
2411
|
+
console.log(` ${import_picocolors.default.red("Lose:")} Syntax recall. Memory of the low-level pipes.`);
|
|
2412
|
+
console.log(import_picocolors.default.cyan(`
|
|
2413
|
+
■ Tomorrow (The 5-hour task - e.g. Claude Opus 4.5)`));
|
|
2414
|
+
console.log(` ${import_picocolors.default.green("Gain:")} Massive scale. You are a systems orchestrator.`);
|
|
2415
|
+
console.log(` ${import_picocolors.default.red("Lose:")} Architectural intimacy. You become a reviewer.`);
|
|
2416
|
+
console.log(import_picocolors.default.cyan(`
|
|
2417
|
+
■ Next 5-10 Years (The 1M+ LOC Crisis)`));
|
|
2418
|
+
console.log(` When an agent introduces a fatal state bug in a monolithic architecture, human reviewers will lack the muscle memory to debug it. Outlier measures this exact sovereignty erosion.
|
|
2291
2419
|
`);
|
|
2292
|
-
|
|
2420
|
+
} else if (action === "knowledge") {
|
|
2293
2421
|
console.log(`
|
|
2294
|
-
|
|
2295
|
-
|
|
2296
|
-
console.log(` ${import_picocolors.default.
|
|
2422
|
+
` + import_picocolors.default.bold(import_picocolors.default.bgBlue(" CORE LITERATURE & REFERENCES ")) + `
|
|
2423
|
+
`);
|
|
2424
|
+
console.log(`1. ${import_picocolors.default.cyan("METR (Measuring AI Ability)")} - Evaluating AI on long-horizon software tasks.`);
|
|
2425
|
+
console.log(`2. ${import_picocolors.default.cyan('The "NPC" vs "High-Agency" Paradigm')} - Remaining sovereign in a room full of agents.`);
|
|
2426
|
+
console.log(`3. ${import_picocolors.default.cyan("Proof of Human Mastery")} - The cryptoeconomic necessity of proving human architectural understanding.`);
|
|
2427
|
+
console.log(`
|
|
2428
|
+
Read the full academic foundation at: ${import_picocolors.default.underline("https://github.com/rosh100yx/outlier")}
|
|
2297
2429
|
`);
|
|
2298
|
-
console.log(import_picocolors.default.dim(` **********************************************************
|
|
2299
|
-
`));
|
|
2300
|
-
console.log(" Outlier Governance Engine");
|
|
2301
|
-
console.log(import_picocolors.default.bold(`
|
|
2302
|
-
***AUDIT COMPLETE***`));
|
|
2303
|
-
console.log(import_picocolors.default.bold(` ***STAY VIGILANT***
|
|
2304
|
-
`));
|
|
2305
2430
|
}
|
|
2431
|
+
outro("Local telemetry run completed. No data left your machine.");
|
|
2306
2432
|
console.log(import_picocolors.default.dim(`└ Share your audit: https://x.com/intent/tweet?text=${encodeURIComponent(`I just audited my codebase for AI reliance and deskilling risk. What does your repo score?
|
|
2307
2433
|
|
|
2308
|
-
\uD83D\uDCCF
|
|
2309
|
-
|
|
2310
|
-
|
|
2434
|
+
\uD83D\uDCCF #Outlier`)}`));
|
|
2435
|
+
if (action === "status") {
|
|
2436
|
+
console.log(import_picocolors.default.dim(`└ Have thoughts on AI deskilling? Tell us: `) + import_picocolors.default.cyan(`outlier participate`));
|
|
2437
|
+
console.log(import_picocolors.default.dim(`└ Keep your local policies updated: `) + import_picocolors.default.cyan(`outlier update`));
|
|
2438
|
+
}
|
|
2311
2439
|
}
|
|
2312
2440
|
main().catch(console.error);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const cyan = (text) => `\x1b[36m${text}\x1b[0m`;
|
|
4
|
+
const dim = (text) => `\x1b[2m${text}\x1b[0m`;
|
|
5
|
+
const bold = (text) => `\x1b[1m${text}\x1b[0m`;
|
|
6
|
+
|
|
7
|
+
console.log('\n' + bold('Welcome to Outlier') + ' - AI Code Governance for the Terminal');
|
|
8
|
+
console.log(dim('────────────────────────────────────────────────────────────'));
|
|
9
|
+
console.log('To start the interactive wizard and audit your codebase, type:\n');
|
|
10
|
+
console.log(` ${cyan('outlier')}\n`);
|
|
11
|
+
console.log('Available Commands:');
|
|
12
|
+
console.log(` ${cyan('outlier status')} Print your Thermal Audit Receipt`);
|
|
13
|
+
console.log(` ${cyan('outlier impact')} See the compounding horizon of AI Deskilling (What you lose/gain)`);
|
|
14
|
+
console.log(` ${cyan('outlier knowledge')} Explore core literature and METR references`);
|
|
15
|
+
console.log(` ${cyan('outlier participate')} Help build the literature on AI deskilling`);
|
|
16
|
+
console.log(` ${cyan('outlier help')} See all available commands`);
|
|
17
|
+
console.log(dim('────────────────────────────────────────────────────────────\n'));
|
package/package.json
CHANGED
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rosh100yx/outlier",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.10",
|
|
4
4
|
"description": "AI Code Governance & Capability Auditing for the Terminal. Measures AI reliance, context waste, and enforces local CI/CD policies.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"outlier": "bin/outlier.js"
|
|
7
7
|
},
|
|
8
8
|
"files": [
|
|
9
9
|
"bin/outlier.js",
|
|
10
|
+
"bin/postinstall.js",
|
|
10
11
|
"src",
|
|
11
12
|
"data"
|
|
12
13
|
],
|
|
13
14
|
"scripts": {
|
|
14
15
|
"build": "bun build ./src/cli.ts --target=node --outfile bin/outlier.js",
|
|
15
16
|
"test": "bun test",
|
|
16
|
-
"start": "bun run src/cli.ts"
|
|
17
|
+
"start": "bun run src/cli.ts",
|
|
18
|
+
"postinstall": "node bin/postinstall.js"
|
|
17
19
|
},
|
|
18
20
|
"type": "module",
|
|
19
21
|
"private": false,
|
package/src/cli.ts
CHANGED
|
@@ -79,7 +79,8 @@ The results will assign you a "vibe" and evaluate if you are at risk of deskilli
|
|
|
79
79
|
async function main() {
|
|
80
80
|
console.clear();
|
|
81
81
|
console.log(pc.cyan(ASCII_LOGO));
|
|
82
|
-
|
|
82
|
+
const pkg = require('../package.json');
|
|
83
|
+
console.log(pc.dim(` Outlier v${pkg.version} · AI Code Reliance & Telemetry Engine\n`));
|
|
83
84
|
|
|
84
85
|
let action = process.argv[2] as any;
|
|
85
86
|
|
|
@@ -90,7 +91,9 @@ async function main() {
|
|
|
90
91
|
console.log(` ${pc.cyan('outlier authorship')} Scan git history for AI co-authorship ratio`);
|
|
91
92
|
console.log(` ${pc.cyan('outlier carbon')} Scan local logs for token waste & carbon cost`);
|
|
92
93
|
console.log(` ${pc.cyan('outlier policy')} Configure CI/CD guardrails and thresholds`);
|
|
93
|
-
console.log(` ${pc.cyan('outlier
|
|
94
|
+
console.log(` ${pc.cyan('outlier impact')} See the compounding horizon of AI Deskilling`);
|
|
95
|
+
console.log(` ${pc.cyan('outlier knowledge')} Explore references, graphs, and the core literature`);
|
|
96
|
+
console.log(` ${pc.cyan('outlier participate')} Help build the academic literature on AI deskilling`);
|
|
94
97
|
console.log('\n' + pc.dim('Run without arguments to start the interactive wizard.'));
|
|
95
98
|
process.exit(0);
|
|
96
99
|
}
|
|
@@ -113,7 +116,9 @@ async function main() {
|
|
|
113
116
|
{ value: 'authorship', label: 'Code Durability', hint: 'Scan git history for AI Code Reliance & Hallucination Risk' },
|
|
114
117
|
{ value: 'carbon', label: 'Cache Bloat', hint: 'Scan local logs for context waste & token costs' },
|
|
115
118
|
{ value: 'policy', label: 'Policy Profiles', hint: 'Set Personal, Team, or Enterprise guardrails in CI' },
|
|
116
|
-
{ value: '
|
|
119
|
+
{ value: 'impact', label: 'Impact Horizon', hint: 'What do you lose and gain in the next 5-10 years?' },
|
|
120
|
+
{ value: 'knowledge', label: 'Literature Base', hint: 'Explore references and the core academic foundation' },
|
|
121
|
+
{ value: 'participate', label: 'Participate', hint: 'Contribute to the literature on AI deskilling' }
|
|
117
122
|
],
|
|
118
123
|
});
|
|
119
124
|
|
|
@@ -282,6 +287,79 @@ ${costIcon}${pc.dim('[3] Tokenomics & Cost')} ${pc.magenta('▰▰▰▰▰▰
|
|
|
282
287
|
${pc.bold('Governance:')} ${ruleFailures > 0 ? pc.red(`${failIcon} ${ruleFailures + 1} policy failures`) : pc.green(`${passIcon} All clear`)}`,
|
|
283
288
|
`${pc.bold('[outlier]')} ${5 - (ruleFailures+1)}/5 policies • ${authWarning || pc.green(`${passIcon} safe surface`)} • ${co2Str}`
|
|
284
289
|
);
|
|
290
|
+
|
|
291
|
+
const timestamp = new Date().toISOString().split('T')[0];
|
|
292
|
+
const isDanger = gitStats && gitStats.ratio > 0.7;
|
|
293
|
+
const verdictZone = isDanger ? pc.red('DANGER ZONE') : pc.green('SAFE / SOVEREIGN');
|
|
294
|
+
const verdictText = isDanger
|
|
295
|
+
? `You are transitioning from 'Creator' to 'Reviewer'.\n At this trajectory, you risk losing architectural \n muscle memory on this codebase within 6 months.`
|
|
296
|
+
: `You are maintaining strong architectural intimacy.\n Your human judgement remains the primary driver\n of logic in this system.`;
|
|
297
|
+
|
|
298
|
+
const isInefficient = parseFloat(cachePct) > 40;
|
|
299
|
+
const cacheVerdict = isInefficient ? pc.yellow('INEFFICIENT') : pc.green('EFFICIENT');
|
|
300
|
+
const cacheText = isInefficient
|
|
301
|
+
? `You are burning paid API tokens and excess compute\n on files the agent isn't even touching.`
|
|
302
|
+
: `Your token usage and human judgment are tightly\n coupled. High signal-to-noise ratio.`;
|
|
303
|
+
|
|
304
|
+
const policyStatus = ruleFailures > 0 ? pc.red('BLOCKED 🛑 (Threshold Exceeded)') : pc.green('PASS ✅ (Within Threshold)');
|
|
305
|
+
const policyAction = ruleFailures > 0 ? 'Triggering Mandatory Mentoring Scenario.' : 'No intervention required.';
|
|
306
|
+
|
|
307
|
+
const totalTokensStr = carbon ? (carbon.totalTokens / 1000).toFixed(1) + 'k' : '0';
|
|
308
|
+
const humanSov = gitStats ? ((1 - gitStats.ratio) * 100).toFixed(1) + '%' : '100%';
|
|
309
|
+
const authorshipStr = authPct + (isDanger ? pc.red(' (High Reliance)') : pc.green(' (Healthy)'));
|
|
310
|
+
|
|
311
|
+
const getProgressBar = (pct: number, length = 10) => {
|
|
312
|
+
const filled = Math.max(0, Math.min(length, Math.round((pct / 100) * length)));
|
|
313
|
+
return '▰'.repeat(filled) + '▱'.repeat(length - filled);
|
|
314
|
+
};
|
|
315
|
+
|
|
316
|
+
const aiPctVal = gitStats ? gitStats.ratio * 100 : 0;
|
|
317
|
+
const aiBar = pc.yellow(getProgressBar(aiPctVal));
|
|
318
|
+
const humanBar = pc.cyan(getProgressBar(100 - aiPctVal));
|
|
319
|
+
const cacheBar = pc.magenta(getProgressBar(parseFloat(cachePct) || 0));
|
|
320
|
+
|
|
321
|
+
if (!isStrict) {
|
|
322
|
+
const dateStr = new Date().toLocaleDateString('en-US', { month: 'short', day: '2-digit', year: 'numeric' }).toUpperCase();
|
|
323
|
+
const timeStr = new Date().toLocaleTimeString('en-US', { hour12: false });
|
|
324
|
+
const repoName = process.cwd().split('/').pop() || 'Unknown';
|
|
325
|
+
|
|
326
|
+
console.log(`
|
|
327
|
+
${pc.dim('┌────────────────────────────────────────────────────────')}
|
|
328
|
+
${pc.dim('│')} ${pc.cyan('█▀█ █░█ ▀█▀ █░░ █ █▀▀ █▀█')} ${pc.bold(':: THERMAL AUDIT RECEIPT')}
|
|
329
|
+
${pc.dim('│')} ${pc.cyan('█▄█ █▄█ ░█░ █▄▄ █ ██▄ █▀▄')} ${pc.dim(`:: TIMESTAMP: ${dateStr}`)}
|
|
330
|
+
${pc.dim('├────────────────────────────────────────────────────────')}
|
|
331
|
+
${pc.dim('│')} ${pc.bold(pc.bgBlue(' [ COGNITIVE BUDGET ] '))}
|
|
332
|
+
${pc.dim('│')} AI Authorship ................. ${aiBar} ${authorshipStr}
|
|
333
|
+
${pc.dim('│')} Human Sovereignty ................. ${humanBar} ${humanSov}
|
|
334
|
+
${pc.dim('│')}
|
|
335
|
+
${pc.dim('│')} ↳ Verdict: ${verdictZone}
|
|
336
|
+
${pc.dim('│')} ${verdictText.split('\n').join('\n ' + pc.dim('│') + ' ')}
|
|
337
|
+
${pc.dim('├────────────────────────────────────────────────────────')}
|
|
338
|
+
${pc.dim('│')} ${pc.bold(pc.bgMagenta(' [ FINANCIAL & COMPUTE TOLL ] '))}
|
|
339
|
+
${pc.dim('│')} Tokens Burnt ................. ${totalTokensStr} vs Human Judgment
|
|
340
|
+
${pc.dim('│')} Cache Bloat ................. ${cacheBar} ${cachePct}% (Unmodified context)
|
|
341
|
+
${pc.dim('│')} Regional Grid ................. ${regionStr}
|
|
342
|
+
${pc.dim('│')}
|
|
343
|
+
${pc.dim('│')} ↳ Verdict: ${cacheVerdict}
|
|
344
|
+
${pc.dim('│')} ${cacheText.split('\n').join('\n ' + pc.dim('│') + ' ')}
|
|
345
|
+
${pc.dim('├────────────────────────────────────────────────────────')}
|
|
346
|
+
${pc.dim('│')} ${pc.bold(pc.bgYellow(pc.black(' [ POLICY ENFORCEMENT ] ')))}
|
|
347
|
+
${pc.dim('│')} Status .................................. ${policyStatus}
|
|
348
|
+
${pc.dim('│')} Action .................................. ${policyAction}
|
|
349
|
+
${pc.dim('├────────────────────────────────────────────────────────')}
|
|
350
|
+
${pc.dim('│')}
|
|
351
|
+
${pc.dim('│')} ${pc.italic(pc.dim('patterns emerge in the commit history,'))}
|
|
352
|
+
${pc.dim('│')} ${pc.italic(pc.dim('code becomes commoditized by algorithms.'))}
|
|
353
|
+
${pc.dim('│')} ${pc.italic(pc.dim('human mastery is the only true moat.'))}
|
|
354
|
+
${pc.dim('│')}
|
|
355
|
+
${pc.dim('│')} ${pc.bold(pc.cyan('***STAY VIGILANT***'))}
|
|
356
|
+
${pc.dim('└────────────────────────────────────────────────────────')}`);
|
|
357
|
+
} else {
|
|
358
|
+
note(
|
|
359
|
+
`status: ${authPct} AI Reliance | ${cachePct}% Cache Bloat | ${co2Str}`,
|
|
360
|
+
`${pc.bold('[outlier]')} CI/CD Audit`
|
|
361
|
+
);
|
|
362
|
+
}
|
|
285
363
|
} catch (e: any) {
|
|
286
364
|
s.stop('Audit failed');
|
|
287
365
|
console.error(pc.red(e.message));
|
|
@@ -410,8 +488,8 @@ Artifact: ${pc.cyan(reportPath)}`,
|
|
|
410
488
|
'Regulatory Compliance'
|
|
411
489
|
);
|
|
412
490
|
}
|
|
413
|
-
} else if (action === '
|
|
414
|
-
s.start('Connecting to the
|
|
491
|
+
} else if (action === 'participate') {
|
|
492
|
+
s.start('Connecting to the Outlier research project...');
|
|
415
493
|
await new Promise(resolve => setTimeout(resolve, 600));
|
|
416
494
|
s.stop('Secure connection established.');
|
|
417
495
|
|
|
@@ -424,7 +502,7 @@ Artifact: ${pc.cyan(reportPath)}`,
|
|
|
424
502
|
]
|
|
425
503
|
});
|
|
426
504
|
|
|
427
|
-
if (isCancel(q1)) { cancel('
|
|
505
|
+
if (isCancel(q1)) { cancel('Survey aborted.'); process.exit(0); }
|
|
428
506
|
|
|
429
507
|
const q2 = await select({
|
|
430
508
|
message: pc.cyan('Do you feel you are losing your deep architectural mastery? (Deskilling)'),
|
|
@@ -435,77 +513,69 @@ Artifact: ${pc.cyan(reportPath)}`,
|
|
|
435
513
|
]
|
|
436
514
|
});
|
|
437
515
|
|
|
438
|
-
if (isCancel(q2)) { cancel('
|
|
516
|
+
if (isCancel(q2)) { cancel('Survey aborted.'); process.exit(0); }
|
|
439
517
|
|
|
440
518
|
const feedback = await text({
|
|
441
519
|
message: pc.cyan('In your own words, what is AI actually doing to your codebase or your job?\n(Note: This will draft a public GitHub issue)'),
|
|
442
520
|
placeholder: 'Honestly, I just let the agent write the regex...',
|
|
443
521
|
validate(value) {
|
|
444
|
-
if (!value || value.length === 0) return `C'mon,
|
|
522
|
+
if (!value || value.length === 0) return `C'mon, say something!`;
|
|
445
523
|
},
|
|
446
524
|
});
|
|
447
525
|
|
|
448
526
|
if (isCancel(feedback)) {
|
|
449
|
-
cancel('
|
|
527
|
+
cancel('Survey aborted.');
|
|
450
528
|
process.exit(0);
|
|
451
529
|
}
|
|
452
530
|
|
|
453
531
|
note(
|
|
454
|
-
`${pc.italic(`"${feedback}"`)}\n\nYour
|
|
455
|
-
'
|
|
532
|
+
`${pc.italic(`"${feedback}"`)}\n\nYour input is invaluable. To make it official and contribute to the literature, we've generated a secure transmission link for you.`,
|
|
533
|
+
'Outlier Research'
|
|
456
534
|
);
|
|
457
535
|
|
|
458
536
|
const surveyData = `**Engineering Reality:** ${q1}\n**Deskilling Impact:** ${q2}\n**Thoughts:**\n${feedback}`;
|
|
459
537
|
|
|
460
|
-
const url = `https://github.com/rosh100yx/outlier/issues/new?assignees=&labels=enhancement&projects=&template=feature_request.md&title=%
|
|
538
|
+
const url = `https://github.com/rosh100yx/outlier/issues/new?assignees=&labels=enhancement&projects=&template=feature_request.md&title=%5BOutlier+Research%5D+Feedback&body=${encodeURIComponent("Drop a screenshot of your Thermal Receipt here! \n\n" + surveyData)}`;
|
|
461
539
|
console.log(`\n${pc.bold('Submit here (and drop your screenshot!):')} ${pc.underline(pc.cyan(url))}\n`);
|
|
540
|
+
} else if (action === 'impact') {
|
|
541
|
+
console.log('\n' + pc.bold(pc.bgMagenta(' THE COMPOUNDING HORIZON OF DESKILLING ')) + '\n');
|
|
542
|
+
console.log(pc.bold('What Do We Lose and Gain?'));
|
|
543
|
+
console.log(pc.cyan('■ Today (The 5-minute task)'));
|
|
544
|
+
console.log(` ${pc.green('Gain:')} Velocity. AI scaffolds your components.`);
|
|
545
|
+
console.log(` ${pc.red('Lose:')} Syntax recall. Memory of the low-level pipes.`);
|
|
546
|
+
console.log(pc.cyan('\n■ Tomorrow (The 5-hour task - e.g. Claude Opus 4.5)'));
|
|
547
|
+
console.log(` ${pc.green('Gain:')} Massive scale. You are a systems orchestrator.`);
|
|
548
|
+
console.log(` ${pc.red('Lose:')} Architectural intimacy. You become a reviewer.`);
|
|
549
|
+
console.log(pc.cyan('\n■ Next 5-10 Years (The 1M+ LOC Crisis)'));
|
|
550
|
+
console.log(` When an agent introduces a fatal state bug in a monolithic architecture, human reviewers will lack the muscle memory to debug it. Outlier measures this exact sovereignty erosion.\n`);
|
|
551
|
+
} else if (action === 'knowledge') {
|
|
552
|
+
console.log('\n' + pc.bold(pc.bgBlue(' CORE LITERATURE & REFERENCES ')) + '\n');
|
|
553
|
+
console.log(`1. ${pc.cyan('METR (Measuring AI Ability)')} - Evaluating AI on long-horizon software tasks.`);
|
|
554
|
+
console.log(`2. ${pc.cyan('The "NPC" vs "High-Agency" Paradigm')} - Remaining sovereign in a room full of agents.`);
|
|
555
|
+
console.log(`3. ${pc.cyan('Proof of Human Mastery')} - The cryptoeconomic necessity of proving human architectural understanding.`);
|
|
556
|
+
console.log(`\nRead the full academic foundation at: ${pc.underline('https://github.com/rosh100yx/outlier')}\n`);
|
|
462
557
|
}
|
|
463
558
|
|
|
464
559
|
outro('Local telemetry run completed. No data left your machine.');
|
|
465
560
|
|
|
466
|
-
//
|
|
467
|
-
if (action === 'status' || action === 'authorship' || action === 'carbon') {
|
|
468
|
-
const d = new Date();
|
|
469
|
-
const dateStr = d.toLocaleDateString('en-US', { month: 'short', day: '2-digit', year: 'numeric' }).toUpperCase();
|
|
470
|
-
const timeStr = d.toLocaleTimeString('en-US', { hour12: false });
|
|
471
|
-
|
|
472
|
-
let repoName = process.cwd().split('/').pop() || 'Unknown';
|
|
473
|
-
|
|
474
|
-
console.log(`\n${pc.dim('-------------------------')} ${pc.bold('AUDIT RECEIPT')} ${pc.dim('-------------------------')}`);
|
|
475
|
-
console.log(`\n Project ${pc.bold(repoName.padEnd(16).substring(0,16))}`);
|
|
476
|
-
console.log(` Timestamp ${pc.dim(`${dateStr} ${timeStr}`)}\n`);
|
|
477
|
-
|
|
478
|
-
console.log(` 01x Authorship Policy ${process.argv.includes('--strict') ? 'Strict Mode' : 'Vibe Check'}`);
|
|
479
|
-
console.log(` 02x AI Reliance Risk ${action === 'carbon' ? 'N/A' : 'Assessed'}`);
|
|
480
|
-
console.log(` 03x Cache Bloat Tokens ${action === 'authorship' ? 'N/A' : 'Audited'}`);
|
|
481
|
-
console.log(` 04x Regional Grid Check ${action === 'authorship' ? 'N/A' : 'Completed'}\n`);
|
|
482
|
-
|
|
483
|
-
console.log(pc.dim(' **********************************************************'));
|
|
484
|
-
console.log(`\n ${pc.italic('patterns emerge in the commit history,')}`);
|
|
485
|
-
console.log(` ${pc.italic('code becomes commoditized by algorithms.')}`);
|
|
486
|
-
console.log(` ${pc.italic('human mastery is the only true moat.')}\n`);
|
|
487
|
-
console.log(pc.dim(' **********************************************************\n'));
|
|
488
|
-
|
|
489
|
-
console.log(' Outlier Governance Engine');
|
|
490
|
-
console.log(pc.bold('\n ***AUDIT COMPLETE***'));
|
|
491
|
-
console.log(pc.bold(' ***STAY VIGILANT***\n'));
|
|
492
|
-
}
|
|
561
|
+
// (Old artifact storytelling block removed to unify receipt UX)
|
|
493
562
|
|
|
494
563
|
console.log(
|
|
495
564
|
pc.dim(
|
|
496
565
|
`└ Share your audit: https://x.com/intent/tweet?text=${encodeURIComponent(
|
|
497
|
-
'I just audited my codebase for AI reliance and deskilling risk. What does your repo score?\n\n📏
|
|
566
|
+
'I just audited my codebase for AI reliance and deskilling risk. What does your repo score?\n\n📏 #Outlier'
|
|
498
567
|
)}`
|
|
499
568
|
)
|
|
500
569
|
);
|
|
501
|
-
|
|
502
|
-
console.log(
|
|
503
|
-
pc.dim(`└ Have thoughts on AI deskilling? Tell us: `) + pc.cyan(`npx @rosh100yx/outlier confessional`)
|
|
504
|
-
);
|
|
505
570
|
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
571
|
+
if (action === 'status') {
|
|
572
|
+
console.log(
|
|
573
|
+
pc.dim(`└ Have thoughts on AI deskilling? Tell us: `) + pc.cyan(`outlier participate`)
|
|
574
|
+
);
|
|
575
|
+
console.log(
|
|
576
|
+
pc.dim(`└ Keep your local policies updated: `) + pc.cyan(`outlier update`)
|
|
577
|
+
);
|
|
578
|
+
}
|
|
509
579
|
}
|
|
510
580
|
|
|
511
581
|
main().catch(console.error);
|