nietzschian-debugger 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.
Files changed (57) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +176 -0
  3. package/dist/cli.d.ts +2 -0
  4. package/dist/cli.js +36 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/debug.d.ts +2 -0
  7. package/dist/commands/debug.js +80 -0
  8. package/dist/commands/debug.js.map +1 -0
  9. package/dist/core/context-manager.d.ts +22 -0
  10. package/dist/core/context-manager.js +73 -0
  11. package/dist/core/context-manager.js.map +1 -0
  12. package/dist/core/session-loop.d.ts +5 -0
  13. package/dist/core/session-loop.js +159 -0
  14. package/dist/core/session-loop.js.map +1 -0
  15. package/dist/core/session.d.ts +5 -0
  16. package/dist/core/session.js +46 -0
  17. package/dist/core/session.js.map +1 -0
  18. package/dist/llm/client.d.ts +25 -0
  19. package/dist/llm/client.js +81 -0
  20. package/dist/llm/client.js.map +1 -0
  21. package/dist/llm/prompts.d.ts +2 -0
  22. package/dist/llm/prompts.js +69 -0
  23. package/dist/llm/prompts.js.map +1 -0
  24. package/dist/llm/validator.d.ts +10 -0
  25. package/dist/llm/validator.js +64 -0
  26. package/dist/llm/validator.js.map +1 -0
  27. package/dist/quotes/corpus.d.ts +2 -0
  28. package/dist/quotes/corpus.js +42 -0
  29. package/dist/quotes/corpus.js.map +1 -0
  30. package/dist/quotes/selector.d.ts +4 -0
  31. package/dist/quotes/selector.js +59 -0
  32. package/dist/quotes/selector.js.map +1 -0
  33. package/dist/scoring/behavior-tagger.d.ts +2 -0
  34. package/dist/scoring/behavior-tagger.js +56 -0
  35. package/dist/scoring/behavior-tagger.js.map +1 -0
  36. package/dist/scoring/growth-profile.d.ts +3 -0
  37. package/dist/scoring/growth-profile.js +58 -0
  38. package/dist/scoring/growth-profile.js.map +1 -0
  39. package/dist/scoring/skill-scorer.d.ts +2 -0
  40. package/dist/scoring/skill-scorer.js +38 -0
  41. package/dist/scoring/skill-scorer.js.map +1 -0
  42. package/dist/storage/file-reader.d.ts +3 -0
  43. package/dist/storage/file-reader.js +60 -0
  44. package/dist/storage/file-reader.js.map +1 -0
  45. package/dist/storage/session-store.d.ts +5 -0
  46. package/dist/storage/session-store.js +72 -0
  47. package/dist/storage/session-store.js.map +1 -0
  48. package/dist/types.d.ts +56 -0
  49. package/dist/types.js +2 -0
  50. package/dist/types.js.map +1 -0
  51. package/dist/ui/growth-display.d.ts +2 -0
  52. package/dist/ui/growth-display.js +69 -0
  53. package/dist/ui/growth-display.js.map +1 -0
  54. package/dist/ui/renderer.d.ts +12 -0
  55. package/dist/ui/renderer.js +54 -0
  56. package/dist/ui/renderer.js.map +1 -0
  57. package/package.json +46 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-scorer.js","sourceRoot":"","sources":["../../src/scoring/skill-scorer.ts"],"names":[],"mappings":"AAEA,MAAM,aAAa,GAA2B;IAC5C,cAAc,EAAE,mBAAmB;IACnC,uBAAuB,EAAE,oBAAoB;IAC7C,gBAAgB,EAAE,gBAAgB;CACnC,CAAC;AAEF,MAAM,aAAa,GAA2B;IAC5C,0BAA0B,EAAE,mBAAmB;IAC/C,0BAA0B,EAAE,oBAAoB;IAChD,kBAAkB,EAAE,oBAAoB;IACxC,0BAA0B,EAAE,gBAAgB;CAC7C,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,MAAM,eAAe,GAAG,GAAG,CAAC;AAC5B,MAAM,eAAe,GAAG,GAAG,CAAC;AAE5B,MAAM,UAAU,kBAAkB,CAAC,YAA2B;IAC5D,MAAM,MAAM,GAAG;QACb,kBAAkB,EAAE,UAAU;QAC9B,iBAAiB,EAAE,UAAU;QAC7B,cAAc,EAAE,UAAU;KAC3B,CAAC;IAEF,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,EAAE,CAAC,SAAS,CAAC;QACzB,IAAI,EAAE,CAAC,GAAG,IAAI,aAAa,EAAE,CAAC;YAC5B,MAAM,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC;QACjC,CAAC;aAAM,IAAI,EAAE,CAAC,GAAG,IAAI,aAAa,EAAE,CAAC;YACnC,MAAM,CAAC,GAAG,CAAC,IAAI,eAAe,CAAC;QACjC,CAAC;IACH,CAAC;IAED,MAAM,CAAC,kBAAkB,GAAG,KAAK,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAC7D,MAAM,CAAC,iBAAiB,GAAG,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAC3D,MAAM,CAAC,cAAc,GAAG,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAErD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,KAAK,CAAC,KAAa;IAC1B,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare function detectFilePaths(text: string): string[];
2
+ export declare function readCodeFile(filePath: string): Promise<string | null>;
3
+ export declare function formatCodeContext(files: Map<string, string>): string;
@@ -0,0 +1,60 @@
1
+ import { readFile, stat } from 'node:fs/promises';
2
+ import { resolve } from 'node:path';
3
+ const FILE_PATH_REGEX = /(?:^|\s|["'`])([.~/][\w./-]+\.\w{1,10})(?=[\s"'`,:;)}\]]|$)/g;
4
+ const MAX_FILE_SIZE = 100_000; // ~100KB, well under context limits
5
+ const MAX_LINES_FOR_CONTEXT = 500;
6
+ export function detectFilePaths(text) {
7
+ const matches = [];
8
+ let match;
9
+ const regex = new RegExp(FILE_PATH_REGEX.source, FILE_PATH_REGEX.flags);
10
+ while ((match = regex.exec(text)) !== null) {
11
+ const path = match[1];
12
+ if (path && !path.startsWith('http') && !path.startsWith('//')) {
13
+ matches.push(path);
14
+ }
15
+ }
16
+ return [...new Set(matches)];
17
+ }
18
+ export async function readCodeFile(filePath) {
19
+ try {
20
+ const resolved = resolve(filePath);
21
+ const stats = await stat(resolved);
22
+ if (!stats.isFile())
23
+ return null;
24
+ if (stats.size > MAX_FILE_SIZE) {
25
+ return truncateToRelevantSection(await readFile(resolved, 'utf-8'));
26
+ }
27
+ const content = await readFile(resolved, 'utf-8');
28
+ return addLineNumbers(content);
29
+ }
30
+ catch {
31
+ return null;
32
+ }
33
+ }
34
+ function addLineNumbers(content) {
35
+ return content
36
+ .split('\n')
37
+ .map((line, i) => `${i + 1}: ${line}`)
38
+ .join('\n');
39
+ }
40
+ function truncateToRelevantSection(content) {
41
+ const lines = content.split('\n');
42
+ if (lines.length <= MAX_LINES_FOR_CONTEXT) {
43
+ return addLineNumbers(content);
44
+ }
45
+ // Take first 100 lines (imports/setup) + last 400 lines (most recent code)
46
+ const head = lines.slice(0, 100);
47
+ const tail = lines.slice(-400);
48
+ const truncated = [...head, `\n... (${lines.length - 500} lines omitted) ...\n`, ...tail].join('\n');
49
+ return addLineNumbers(truncated);
50
+ }
51
+ export function formatCodeContext(files) {
52
+ if (files.size === 0)
53
+ return '';
54
+ const sections = [];
55
+ for (const [path, content] of files) {
56
+ sections.push(`--- File: ${path} ---\n${content}`);
57
+ }
58
+ return sections.join('\n\n');
59
+ }
60
+ //# sourceMappingURL=file-reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-reader.js","sourceRoot":"","sources":["../../src/storage/file-reader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Session } from '../types.js';
2
+ export declare function ensureSessionsDir(): Promise<void>;
3
+ export declare function saveSession(session: Session): Promise<string>;
4
+ export declare function loadSession(id: string): Promise<Session | null>;
5
+ export declare function listSessions(): Promise<Session[]>;
@@ -0,0 +1,72 @@
1
+ import { readdir, readFile, writeFile, mkdir } from 'node:fs/promises';
2
+ import { join } from 'node:path';
3
+ import { SCHEMA_VERSION } from '../types.js';
4
+ const SESSIONS_DIR = '.nietzschian/sessions';
5
+ function getSessionsPath() {
6
+ return join(process.cwd(), SESSIONS_DIR);
7
+ }
8
+ export async function ensureSessionsDir() {
9
+ const dir = getSessionsPath();
10
+ await mkdir(dir, { recursive: true });
11
+ }
12
+ export async function saveSession(session) {
13
+ await ensureSessionsDir();
14
+ const filePath = join(getSessionsPath(), `${session.id}.json`);
15
+ await writeFile(filePath, JSON.stringify(session, null, 2), 'utf-8');
16
+ return filePath;
17
+ }
18
+ export async function loadSession(id) {
19
+ try {
20
+ const filePath = join(getSessionsPath(), `${id}.json`);
21
+ const content = await readFile(filePath, 'utf-8');
22
+ const data = JSON.parse(content);
23
+ return migrateSession(data);
24
+ }
25
+ catch {
26
+ return null;
27
+ }
28
+ }
29
+ export async function listSessions() {
30
+ try {
31
+ const dir = getSessionsPath();
32
+ const files = await readdir(dir);
33
+ const jsonFiles = files.filter((f) => f.endsWith('.json'));
34
+ const sessions = [];
35
+ for (const file of jsonFiles) {
36
+ try {
37
+ const content = await readFile(join(dir, file), 'utf-8');
38
+ const data = JSON.parse(content);
39
+ sessions.push(migrateSession(data));
40
+ }
41
+ catch {
42
+ // Skip corrupted files
43
+ }
44
+ }
45
+ sessions.sort((a, b) => a.timestamp.localeCompare(b.timestamp));
46
+ return sessions;
47
+ }
48
+ catch {
49
+ return [];
50
+ }
51
+ }
52
+ function migrateSession(data) {
53
+ const version = data.schemaVersion ?? 0;
54
+ if (version < SCHEMA_VERSION) {
55
+ return {
56
+ schemaVersion: SCHEMA_VERSION,
57
+ id: data.id,
58
+ timestamp: data.timestamp ?? new Date().toISOString(),
59
+ endTimestamp: data.endTimestamp ?? new Date().toISOString(),
60
+ problemDescription: data.problemDescription ?? '',
61
+ intensity: data.intensity ?? 'nietzsche',
62
+ outcome: data.outcome ?? 'abandoned',
63
+ questionsToRootCause: data.questionsToRootCause ?? 0,
64
+ codeFiles: data.codeFiles ?? [],
65
+ transcript: data.transcript ?? [],
66
+ skillScores: data.skillScores ?? { assumptionChecking: 5, evidenceGathering: 5, rootCauseSpeed: 5 },
67
+ behaviorTags: data.behaviorTags ?? [],
68
+ };
69
+ }
70
+ return data;
71
+ }
72
+ //# sourceMappingURL=session-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/storage/session-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ export type Intensity = 'socrates' | 'nietzsche' | 'zarathustra';
2
+ export type SessionOutcome = 'solved' | 'abandoned';
3
+ export type QuoteContext = 'avoidance' | 'overwhelm' | 'strategy' | 'victory' | 'defeat' | 'perseverance';
4
+ export interface Quote {
5
+ text: string;
6
+ philosopher: string;
7
+ context: QuoteContext;
8
+ source: string;
9
+ }
10
+ export interface BehaviorTag {
11
+ turnNumber: number;
12
+ tag: string;
13
+ dimension: 'assumptionChecking' | 'evidenceGathering' | 'rootCauseSpeed';
14
+ }
15
+ export interface Turn {
16
+ turnNumber: number;
17
+ question: string;
18
+ response: string;
19
+ model: string;
20
+ quoteUsed: Quote | null;
21
+ behaviorTags: string[];
22
+ timestamp: string;
23
+ }
24
+ export interface SkillScores {
25
+ assumptionChecking: number;
26
+ evidenceGathering: number;
27
+ rootCauseSpeed: number;
28
+ }
29
+ export interface Session {
30
+ schemaVersion: number;
31
+ id: string;
32
+ timestamp: string;
33
+ endTimestamp: string;
34
+ problemDescription: string;
35
+ intensity: Intensity;
36
+ outcome: SessionOutcome;
37
+ questionsToRootCause: number;
38
+ codeFiles: string[];
39
+ transcript: Turn[];
40
+ skillScores: SkillScores;
41
+ behaviorTags: BehaviorTag[];
42
+ }
43
+ export interface GrowthProfile {
44
+ totalSessions: number;
45
+ solvedCount: number;
46
+ abandonedCount: number;
47
+ averageScores: SkillScores;
48
+ recentTrend: TrendMap;
49
+ }
50
+ export type Trend = 'improving' | 'declining' | 'stable';
51
+ export interface TrendMap {
52
+ assumptionChecking: Trend;
53
+ evidenceGathering: Trend;
54
+ rootCauseSpeed: Trend;
55
+ }
56
+ export declare const SCHEMA_VERSION = 1;
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export const SCHEMA_VERSION = 1;
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAgEA,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Session, GrowthProfile, Quote } from '../types.js';
2
+ export declare function renderGrowthScore(session: Session, growthProfile?: GrowthProfile, closingQuote?: Quote): string;
@@ -0,0 +1,69 @@
1
+ const FILLED = '█';
2
+ const EMPTY = '░';
3
+ const BAR_LENGTH = 10;
4
+ const RESET = '\x1b[0m';
5
+ const BOLD = '\x1b[1m';
6
+ const DIM = '\x1b[2m';
7
+ const GREEN = '\x1b[32m';
8
+ const RED = '\x1b[31m';
9
+ const YELLOW = '\x1b[33m';
10
+ function renderBar(score) {
11
+ const clamped = Math.max(1, Math.min(10, Math.round(score)));
12
+ return FILLED.repeat(clamped) + EMPTY.repeat(BAR_LENGTH - clamped);
13
+ }
14
+ function scoreLabel(score) {
15
+ if (score >= 8)
16
+ return 'strong';
17
+ if (score >= 5)
18
+ return 'moderate';
19
+ return 'weak';
20
+ }
21
+ function trendIndicator(trend, delta) {
22
+ if (trend === 'improving') {
23
+ const d = delta !== undefined ? ` (+${delta})` : '';
24
+ return `${GREEN}improving${d}${RESET}`;
25
+ }
26
+ if (trend === 'declining') {
27
+ const d = delta !== undefined ? ` (${delta})` : '';
28
+ return `${RED}declining${d}${RESET}`;
29
+ }
30
+ return `${DIM}stable${RESET}`;
31
+ }
32
+ export function renderGrowthScore(session, growthProfile, closingQuote) {
33
+ const lines = [];
34
+ const outcomeLabel = session.outcome === 'solved' ? 'Solved' : 'Abandoned';
35
+ lines.push(`\n${BOLD}Session Complete — ${session.questionsToRootCause} questions to root cause (${outcomeLabel})${RESET}`);
36
+ lines.push('');
37
+ lines.push(`${BOLD}Your Debugging Profile:${RESET}`);
38
+ const scores = session.skillScores;
39
+ const dims = [
40
+ { name: 'Assumption-checking', key: 'assumptionChecking', label: scoreLabel(scores.assumptionChecking) },
41
+ { name: 'Evidence-gathering', key: 'evidenceGathering', label: scoreLabel(scores.evidenceGathering) },
42
+ { name: 'Root cause speed', key: 'rootCauseSpeed', label: scoreLabel(scores.rootCauseSpeed) },
43
+ ];
44
+ for (let i = 0; i < dims.length; i++) {
45
+ const dim = dims[i];
46
+ const bar = renderBar(scores[dim.key]);
47
+ const connector = i < dims.length - 1 ? '┣' : '┗';
48
+ let line = `${connector} ${dim.name.padEnd(22)} ${bar} ${dim.label}`;
49
+ if (growthProfile) {
50
+ const trend = growthProfile.recentTrend[dim.key];
51
+ if (trend !== 'stable') {
52
+ line += ` — ${trendIndicator(trend)}`;
53
+ }
54
+ }
55
+ lines.push(line);
56
+ }
57
+ if (growthProfile && growthProfile.totalSessions > 1) {
58
+ lines.push('');
59
+ lines.push(`${DIM}${growthProfile.totalSessions} sessions total | ${growthProfile.solvedCount} solved | ${growthProfile.abandonedCount} abandoned${RESET}`);
60
+ }
61
+ if (closingQuote) {
62
+ lines.push('');
63
+ lines.push(`${DIM}"${closingQuote.text}"${RESET}`);
64
+ lines.push(`${DIM} — ${closingQuote.philosopher}${RESET}`);
65
+ }
66
+ lines.push('');
67
+ return lines.join('\n');
68
+ }
69
+ //# sourceMappingURL=growth-display.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"growth-display.js","sourceRoot":"","sources":["../../src/ui/growth-display.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,GAAG,GAAG,CAAC;AACnB,MAAM,KAAK,GAAG,GAAG,CAAC;AAClB,MAAM,UAAU,GAAG,EAAE,CAAC;AAEtB,MAAM,KAAK,GAAG,SAAS,CAAC;AACxB,MAAM,IAAI,GAAG,SAAS,CAAC;AACvB,MAAM,GAAG,GAAG,SAAS,CAAC;AACtB,MAAM,KAAK,GAAG,UAAU,CAAC;AACzB,MAAM,GAAG,GAAG,UAAU,CAAC;AACvB,MAAM,MAAM,GAAG,UAAU,CAAC;AAE1B,SAAS,SAAS,CAAC,KAAa;IAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC7D,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,GAAG,OAAO,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,UAAU,CAAC,KAAa;IAC/B,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IAChC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,UAAU,CAAC;IAClC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,KAAY,EAAE,KAAc;IAClD,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACpD,OAAO,GAAG,KAAK,YAAY,CAAC,GAAG,KAAK,EAAE,CAAC;IACzC,CAAC;IACD,IAAI,KAAK,KAAK,WAAW,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACnD,OAAO,GAAG,GAAG,YAAY,CAAC,GAAG,KAAK,EAAE,CAAC;IACvC,CAAC;IACD,OAAO,GAAG,GAAG,SAAS,KAAK,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,OAAgB,EAChB,aAA6B,EAC7B,YAAoB;IAEpB,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC;IAC3E,KAAK,CAAC,IAAI,CACR,KAAK,IAAI,sBAAsB,OAAO,CAAC,oBAAoB,6BAA6B,YAAY,IAAI,KAAK,EAAE,CAChH,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,0BAA0B,KAAK,EAAE,CAAC,CAAC;IAErD,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IACnC,MAAM,IAAI,GAAmE;QAC3E,EAAE,IAAI,EAAE,qBAAqB,EAAE,GAAG,EAAE,oBAAoB,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAAE;QACxG,EAAE,IAAI,EAAE,oBAAoB,EAAE,GAAG,EAAE,mBAAmB,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE;QACrG,EAAE,IAAI,EAAE,kBAAkB,EAAE,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE;KAC9F,CAAC;IAEF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QACvC,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAClD,IAAI,IAAI,GAAG,GAAG,SAAS,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC;QAEtE,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,KAAK,GAAG,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACjD,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;gBACvB,IAAI,IAAI,MAAM,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YACxC,CAAC;QACH,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,IAAI,aAAa,IAAI,aAAa,CAAC,aAAa,GAAG,CAAC,EAAE,CAAC;QACrD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CACR,GAAG,GAAG,GAAG,aAAa,CAAC,aAAa,qBAAqB,aAAa,CAAC,WAAW,aAAa,aAAa,CAAC,cAAc,aAAa,KAAK,EAAE,CAChJ,CAAC;IACJ,CAAC;IAED,IAAI,YAAY,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,YAAY,CAAC,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,MAAM,YAAY,CAAC,WAAW,GAAG,KAAK,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,12 @@
1
+ export declare function streamToTerminal(text: string): void;
2
+ export declare function newLine(): void;
3
+ export declare function displayMessage(message: string): void;
4
+ export declare function displayBold(message: string): void;
5
+ export declare function displayDim(message: string): void;
6
+ export declare function displayError(message: string): void;
7
+ export declare function displayWarning(message: string): void;
8
+ export declare function displaySuccess(message: string): void;
9
+ export declare function displayQuote(text: string, philosopher: string): void;
10
+ export declare function displaySessionHeader(intensity: string): void;
11
+ export declare function displayPrompt(): void;
12
+ export declare function displayApiKeyHelp(): void;
@@ -0,0 +1,54 @@
1
+ const RESET = '\x1b[0m';
2
+ const BOLD = '\x1b[1m';
3
+ const DIM = '\x1b[2m';
4
+ const YELLOW = '\x1b[33m';
5
+ const RED = '\x1b[31m';
6
+ const GREEN = '\x1b[32m';
7
+ const CYAN = '\x1b[36m';
8
+ export function streamToTerminal(text) {
9
+ process.stdout.write(text);
10
+ }
11
+ export function newLine() {
12
+ process.stdout.write('\n');
13
+ }
14
+ export function displayMessage(message) {
15
+ console.log(message);
16
+ }
17
+ export function displayBold(message) {
18
+ console.log(`${BOLD}${message}${RESET}`);
19
+ }
20
+ export function displayDim(message) {
21
+ console.log(`${DIM}${message}${RESET}`);
22
+ }
23
+ export function displayError(message) {
24
+ console.error(`${RED}${BOLD}Error:${RESET} ${RED}${message}${RESET}`);
25
+ }
26
+ export function displayWarning(message) {
27
+ console.warn(`${YELLOW}${message}${RESET}`);
28
+ }
29
+ export function displaySuccess(message) {
30
+ console.log(`${GREEN}${message}${RESET}`);
31
+ }
32
+ export function displayQuote(text, philosopher) {
33
+ console.log(`\n${DIM}"${text}"${RESET}`);
34
+ console.log(`${DIM} — ${philosopher}${RESET}`);
35
+ }
36
+ export function displaySessionHeader(intensity) {
37
+ const label = intensity.charAt(0).toUpperCase() + intensity.slice(1);
38
+ console.log(`\n${BOLD}${CYAN}Nietzschian Debugger${RESET} ${DIM}[${label} mode]${RESET}\n`);
39
+ }
40
+ export function displayPrompt() {
41
+ process.stdout.write(`${BOLD}> ${RESET}`);
42
+ }
43
+ export function displayApiKeyHelp() {
44
+ console.log(`
45
+ ${BOLD}${RED}Missing API Key${RESET}
46
+
47
+ Set your Anthropic API key to use the Nietzschian Debugger:
48
+
49
+ ${BOLD}export ANTHROPIC_API_KEY=your-key-here${RESET}
50
+
51
+ Get a key at: ${CYAN}https://console.anthropic.com/${RESET}
52
+ `);
53
+ }
54
+ //# sourceMappingURL=renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/ui/renderer.ts"],"names":[],"mappings":"AAAA,MAAM,KAAK,GAAG,SAAS,CAAC;AACxB,MAAM,IAAI,GAAG,SAAS,CAAC;AACvB,MAAM,GAAG,GAAG,SAAS,CAAC;AACtB,MAAM,MAAM,GAAG,UAAU,CAAC;AAC1B,MAAM,GAAG,GAAG,UAAU,CAAC;AACvB,MAAM,KAAK,GAAG,UAAU,CAAC;AACzB,MAAM,IAAI,GAAG,UAAU,CAAC;AAExB,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,OAAO;IACrB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,SAAS,KAAK,IAAI,GAAG,GAAG,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,WAAmB;IAC5D,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,IAAI,IAAI,KAAK,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,MAAM,WAAW,GAAG,KAAK,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IACpD,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACrE,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,IAAI,uBAAuB,KAAK,IAAI,GAAG,IAAI,KAAK,SAAS,KAAK,IAAI,CAAC,CAAC;AAC9F,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,KAAK,KAAK,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,iBAAiB;IAC/B,OAAO,CAAC,GAAG,CAAC;EACZ,IAAI,GAAG,GAAG,kBAAkB,KAAK;;;;IAI/B,IAAI,yCAAyC,KAAK;;gBAEtC,IAAI,iCAAiC,KAAK;CACzD,CAAC,CAAC;AACH,CAAC"}
package/package.json ADDED
@@ -0,0 +1,46 @@
1
+ {
2
+ "name": "nietzschian-debugger",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "description": "The anti-AI debugger. What doesn't kill your code makes it stronger. Confrontational questioning for developers.",
6
+ "main": "dist/cli.js",
7
+ "bin": {
8
+ "nietzschian": "dist/cli.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "README.md",
13
+ "LICENSE"
14
+ ],
15
+ "scripts": {
16
+ "build": "tsc",
17
+ "prepublishOnly": "npm run build && npm test",
18
+ "dev": "node --loader ts-node/esm src/cli.ts",
19
+ "test": "vitest run",
20
+ "test:watch": "vitest",
21
+ "lint": "eslint src/"
22
+ },
23
+ "keywords": ["debugging", "education", "nietzsche", "philosophy", "developer-tools", "ai", "learning", "critical-thinking", "cli", "socratic", "anthropic", "claude"],
24
+ "author": "Dilawar Gopang",
25
+ "license": "MIT",
26
+ "repository": {
27
+ "type": "git",
28
+ "url": "git+https://github.com/DilawarShafiq/nietzschian-debugger.git"
29
+ },
30
+ "homepage": "https://github.com/DilawarShafiq/nietzschian-debugger#readme",
31
+ "bugs": {
32
+ "url": "https://github.com/DilawarShafiq/nietzschian-debugger/issues"
33
+ },
34
+ "engines": {
35
+ "node": ">=20.0.0"
36
+ },
37
+ "dependencies": {
38
+ "@anthropic-ai/sdk": "^0.78.0",
39
+ "commander": "^12.0.0"
40
+ },
41
+ "devDependencies": {
42
+ "@types/node": "^20.0.0",
43
+ "typescript": "^5.0.0",
44
+ "vitest": "^2.0.0"
45
+ }
46
+ }