fivocell 4.1.2 → 4.1.3
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/dist/__tests__/prelaunch-reality-check.test.d.ts +2 -0
- package/dist/__tests__/prelaunch-reality-check.test.d.ts.map +1 -0
- package/dist/__tests__/prelaunch-reality-check.test.js +172 -0
- package/dist/__tests__/prelaunch-reality-check.test.js.map +1 -0
- package/dist/__tests__/tool-specific-format.test.js +49 -6
- package/dist/__tests__/tool-specific-format.test.js.map +1 -1
- package/dist/behavioral-tracker.d.ts +30 -0
- package/dist/behavioral-tracker.d.ts.map +1 -1
- package/dist/behavioral-tracker.js +87 -0
- package/dist/behavioral-tracker.js.map +1 -1
- package/dist/cli.js +109 -1
- package/dist/cli.js.map +1 -1
- package/dist/core/prompt-builder.d.ts +1 -1
- package/dist/core/prompt-builder.d.ts.map +1 -1
- package/dist/core/prompt-builder.js +100 -42
- package/dist/core/prompt-builder.js.map +1 -1
- package/dist/daemon/server.js +1 -1
- package/dist/daemon/server.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prelaunch-reality-check.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/prelaunch-reality-check.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const database_1 = require("../core/database");
|
|
37
|
+
const os = __importStar(require("os"));
|
|
38
|
+
const path = __importStar(require("path"));
|
|
39
|
+
const fs = __importStar(require("fs"));
|
|
40
|
+
// Pre-Launch Reality Check — Tests 1, 3, 5, 6
|
|
41
|
+
// These tests prove that the data backing `cell status --session` and
|
|
42
|
+
// `cell status --decisions` is queryable, well-formed, and survives restart.
|
|
43
|
+
const TMP_HOME = path.join(os.tmpdir(), 'fivo-cell-prelaunch-' + Date.now());
|
|
44
|
+
const REAL_HOME = process.env.USERPROFILE || process.env.HOME || '';
|
|
45
|
+
process.env.USERPROFILE = TMP_HOME;
|
|
46
|
+
process.env.HOME = TMP_HOME;
|
|
47
|
+
const behavioral_tracker_1 = require("../behavioral-tracker");
|
|
48
|
+
beforeAll(() => {
|
|
49
|
+
fs.mkdirSync(TMP_HOME, { recursive: true });
|
|
50
|
+
(0, database_1.initializeDatabase)();
|
|
51
|
+
(0, behavioral_tracker_1.initBehaviorTables)();
|
|
52
|
+
});
|
|
53
|
+
afterAll(() => {
|
|
54
|
+
try {
|
|
55
|
+
fs.rmSync(TMP_HOME, { recursive: true, force: true });
|
|
56
|
+
}
|
|
57
|
+
catch { }
|
|
58
|
+
process.env.USERPROFILE = REAL_HOME;
|
|
59
|
+
process.env.HOME = REAL_HOME;
|
|
60
|
+
});
|
|
61
|
+
describe('Pre-Launch Test 1: cell status --session', () => {
|
|
62
|
+
it('returns last touched file with timestamp', () => {
|
|
63
|
+
const db = (0, database_1.getDb)();
|
|
64
|
+
// Simulate a file save event being recorded
|
|
65
|
+
db.prepare(`
|
|
66
|
+
INSERT INTO session_files (project, file_path, touch_count, first_touched, last_touched)
|
|
67
|
+
VALUES (?, ?, 3, datetime('now', '-5 minutes'), datetime('now'))
|
|
68
|
+
`).run('prelaunch-test', 'src/server.ts');
|
|
69
|
+
const last = (0, behavioral_tracker_1.getLastTouchedFile)('prelaunch-test');
|
|
70
|
+
expect(last).not.toBeNull();
|
|
71
|
+
expect(last?.file).toBe('src/server.ts');
|
|
72
|
+
expect(last?.touchCount).toBe(3);
|
|
73
|
+
});
|
|
74
|
+
it('returns null when no files touched', () => {
|
|
75
|
+
const last = (0, behavioral_tracker_1.getLastTouchedFile)('no-such-project-ever');
|
|
76
|
+
expect(last).toBeNull();
|
|
77
|
+
});
|
|
78
|
+
it('returns most-recent when multiple files exist', () => {
|
|
79
|
+
const db = (0, database_1.getDb)();
|
|
80
|
+
db.prepare(`DELETE FROM session_files WHERE project = 'multi-file-test'`).run();
|
|
81
|
+
db.prepare(`
|
|
82
|
+
INSERT INTO session_files (project, file_path, touch_count, first_touched, last_touched)
|
|
83
|
+
VALUES
|
|
84
|
+
('multi-file-test', 'src/old.ts', 1, datetime('now', '-1 hour'), datetime('now', '-1 hour')),
|
|
85
|
+
('multi-file-test', 'src/new.ts', 2, datetime('now'), datetime('now'))
|
|
86
|
+
`).run();
|
|
87
|
+
const last = (0, behavioral_tracker_1.getLastTouchedFile)('multi-file-test');
|
|
88
|
+
expect(last?.file).toBe('src/new.ts');
|
|
89
|
+
});
|
|
90
|
+
it('counts detected patterns', () => {
|
|
91
|
+
const db = (0, database_1.getDb)();
|
|
92
|
+
db.prepare(`DELETE FROM code_patterns WHERE project = 'pattern-test'`).run();
|
|
93
|
+
db.prepare(`
|
|
94
|
+
INSERT INTO code_patterns (project, file_path, pattern_type, pattern_value, category, count, trust_score, language)
|
|
95
|
+
VALUES
|
|
96
|
+
('pattern-test', 'a.ts', 'quote', 'single', 'style', 50, 90, 'ts'),
|
|
97
|
+
('pattern-test', 'a.ts', 'semi', 'always', 'style', 50, 90, 'ts'),
|
|
98
|
+
('pattern-test', 'b.ts', 'blind', 'no-try-catch', 'blind_spots', 5, 80, 'ts')
|
|
99
|
+
`).run();
|
|
100
|
+
const counts = (0, behavioral_tracker_1.getPatternCounts)('pattern-test');
|
|
101
|
+
expect(counts.total).toBe(3);
|
|
102
|
+
expect(counts.byCategory.style).toBe(2);
|
|
103
|
+
expect(counts.byCategory.blind_spots).toBe(1);
|
|
104
|
+
});
|
|
105
|
+
it('exposes current context from logContext', () => {
|
|
106
|
+
(0, behavioral_tracker_1.logContext)({ project: 'ctx-test', task: 'fixing blind spots', files: ['a.ts', 'b.ts'] });
|
|
107
|
+
const summary = (0, behavioral_tracker_1.getBehaviorSummary)('ctx-test');
|
|
108
|
+
expect(summary.currentContext?.task).toBe('fixing blind spots');
|
|
109
|
+
expect(summary.currentContext?.files).toEqual(['a.ts', 'b.ts']);
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
describe('Pre-Launch Test 3: cell status --decisions', () => {
|
|
113
|
+
it('returns last 5 decisions with ago + worked flag', () => {
|
|
114
|
+
const proj = 'decisions-test';
|
|
115
|
+
// Insert with explicit, spaced-out timestamps to guarantee ordering
|
|
116
|
+
const db = (0, database_1.getDb)();
|
|
117
|
+
db.prepare(`DELETE FROM decision_log WHERE project = ?`).run(proj);
|
|
118
|
+
db.prepare(`
|
|
119
|
+
INSERT INTO decision_log (project, file_path, decision, worked, decided_at)
|
|
120
|
+
VALUES
|
|
121
|
+
(?, 'a.ts', 'used better-sqlite3 for cross-platform compat', 1, datetime('now', '-3 minutes')),
|
|
122
|
+
(?, 'b.ts', 'skipped ts-node for ESM', 0, datetime('now', '-2 minutes')),
|
|
123
|
+
(?, 'server.ts', 'added outer try/catch in server.ts', 1, datetime('now', '-1 minute'))
|
|
124
|
+
`).run(proj, proj, proj);
|
|
125
|
+
const recent = (0, behavioral_tracker_1.getRecentDecisionsWithAgo)(proj, 5);
|
|
126
|
+
expect(recent.length).toBe(3);
|
|
127
|
+
// Most recent first
|
|
128
|
+
expect(recent[0].decision).toContain('outer try/catch');
|
|
129
|
+
expect(recent[0].worked).toBe(true);
|
|
130
|
+
expect(recent[0].ago).toMatch(/second|minute|hour/);
|
|
131
|
+
});
|
|
132
|
+
it('worked=true renders as Accepted, worked=false as Rejected', () => {
|
|
133
|
+
const proj = 'verdict-test';
|
|
134
|
+
const db = (0, database_1.getDb)();
|
|
135
|
+
db.prepare(`DELETE FROM decision_log WHERE project = ?`).run(proj);
|
|
136
|
+
db.prepare(`
|
|
137
|
+
INSERT INTO decision_log (project, decision, worked, decided_at)
|
|
138
|
+
VALUES
|
|
139
|
+
(?, 'good choice', 1, datetime('now', '-2 minutes')),
|
|
140
|
+
(?, 'bad choice', 0, datetime('now', '-1 minute'))
|
|
141
|
+
`).run(proj, proj);
|
|
142
|
+
const recent = (0, behavioral_tracker_1.getRecentDecisionsWithAgo)(proj, 5);
|
|
143
|
+
const accepted = recent.find(r => r.decision === 'good choice');
|
|
144
|
+
const rejected = recent.find(r => r.decision === 'bad choice');
|
|
145
|
+
expect(accepted?.worked).toBe(true);
|
|
146
|
+
expect(rejected?.worked).toBe(false);
|
|
147
|
+
});
|
|
148
|
+
it('returns empty array for unknown project', () => {
|
|
149
|
+
const recent = (0, behavioral_tracker_1.getRecentDecisionsWithAgo)('no-such-project-' + Date.now());
|
|
150
|
+
expect(recent).toEqual([]);
|
|
151
|
+
});
|
|
152
|
+
it('summary exposes totalDecisions count', () => {
|
|
153
|
+
const proj = 'count-test';
|
|
154
|
+
(0, behavioral_tracker_1.logDecision)({ project: proj, decision: 'one', worked: true });
|
|
155
|
+
(0, behavioral_tracker_1.logDecision)({ project: proj, decision: 'two', worked: false });
|
|
156
|
+
(0, behavioral_tracker_1.logDecision)({ project: proj, decision: 'three', worked: true });
|
|
157
|
+
const summary = (0, behavioral_tracker_1.getBehaviorSummary)(proj);
|
|
158
|
+
expect(summary.totalDecisions).toBeGreaterThanOrEqual(3);
|
|
159
|
+
});
|
|
160
|
+
});
|
|
161
|
+
describe('Pre-Launch Test 6: restart persistence', () => {
|
|
162
|
+
it('decisions survive a fresh summary call (SQLite-backed)', () => {
|
|
163
|
+
const proj = 'persist-test';
|
|
164
|
+
(0, behavioral_tracker_1.logDecision)({ project: proj, decision: 'persistent decision', worked: true });
|
|
165
|
+
// Call summary multiple times to simulate restarts
|
|
166
|
+
const s1 = (0, behavioral_tracker_1.getBehaviorSummary)(proj);
|
|
167
|
+
const s2 = (0, behavioral_tracker_1.getBehaviorSummary)(proj);
|
|
168
|
+
expect(s1.totalDecisions).toBe(s2.totalDecisions);
|
|
169
|
+
expect(s1.totalDecisions).toBeGreaterThanOrEqual(1);
|
|
170
|
+
});
|
|
171
|
+
});
|
|
172
|
+
//# sourceMappingURL=prelaunch-reality-check.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prelaunch-reality-check.test.js","sourceRoot":"","sources":["../../src/__tests__/prelaunch-reality-check.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -60,10 +60,52 @@ describe('tool-specific formatting (Unit 2.5)', () => {
|
|
|
60
60
|
it('Claude Code format: @cell block with sections', () => {
|
|
61
61
|
const ctx = (0, prompt_builder_1.buildContext)('fivo-cell', 'claude-code');
|
|
62
62
|
const out = (0, prompt_builder_1.formatContextForTool)(ctx, 'claude-code');
|
|
63
|
-
|
|
64
|
-
expect(out).toContain('
|
|
65
|
-
expect(out).toContain('
|
|
66
|
-
|
|
63
|
+
// Pre-Launch Test 7: header uses ⚡ CELL CONTEXT — <project>
|
|
64
|
+
expect(out).toContain('⚡ CELL CONTEXT');
|
|
65
|
+
expect(out).toContain('fivo-cell');
|
|
66
|
+
// New section markers
|
|
67
|
+
expect(out).toContain('📦 PROJECT');
|
|
68
|
+
expect(out).toContain('Stack:');
|
|
69
|
+
expect(out).toContain('⚠️ BLIND SPOTS');
|
|
70
|
+
expect(out).toContain('🎯 LAST SESSION');
|
|
71
|
+
// Footer
|
|
72
|
+
expect(out).toContain('End @cell Context');
|
|
73
|
+
});
|
|
74
|
+
it('Pre-Launch Test 7: divider lines wrap the header', () => {
|
|
75
|
+
const ctx = (0, prompt_builder_1.buildContext)('fivo-cell', 'claude-code');
|
|
76
|
+
const out = (0, prompt_builder_1.formatContextForTool)(ctx, 'claude-code');
|
|
77
|
+
const divider = '━'.repeat(15);
|
|
78
|
+
// Header is wrapped with two divider lines
|
|
79
|
+
const dividerMatches = out.match(new RegExp(divider, 'g')) || [];
|
|
80
|
+
expect(dividerMatches.length).toBeGreaterThanOrEqual(2);
|
|
81
|
+
});
|
|
82
|
+
it('Pre-Launch Test 7: real project name appears (not "Fivo-Cell" literal)', () => {
|
|
83
|
+
const ctx = (0, prompt_builder_1.buildContext)('fivo-cell', 'claude-code');
|
|
84
|
+
const out = (0, prompt_builder_1.formatContextForTool)(ctx, 'claude-code');
|
|
85
|
+
expect(out).toContain('⚡ CELL CONTEXT — fivo-cell');
|
|
86
|
+
});
|
|
87
|
+
it('Pre-Launch Test 7: blind spots show as → file:line style', () => {
|
|
88
|
+
const ctx = (0, prompt_builder_1.buildContext)('fivo-cell', 'claude-code');
|
|
89
|
+
const out = (0, prompt_builder_1.formatContextForTool)(ctx, 'claude-code');
|
|
90
|
+
// blind spot section uses → prefix
|
|
91
|
+
expect(out).toMatch(/⚠️ BLIND SPOTS:[\s\S]*→/);
|
|
92
|
+
});
|
|
93
|
+
it('Pre-Launch Test 7: last session shows working-on task', () => {
|
|
94
|
+
const ctx = (0, prompt_builder_1.buildContext)('fivo-cell', 'claude-code');
|
|
95
|
+
const out = (0, prompt_builder_1.formatContextForTool)(ctx, 'claude-code');
|
|
96
|
+
expect(out).toMatch(/🎯 LAST SESSION[\s\S]*Working on:/);
|
|
97
|
+
});
|
|
98
|
+
it('@cell block works for @cell token (canonical name)', () => {
|
|
99
|
+
const ctx = (0, prompt_builder_1.buildContext)('fivo-cell', '@cell');
|
|
100
|
+
const out = (0, prompt_builder_1.formatContextForTool)(ctx, '@cell');
|
|
101
|
+
expect(out).toContain('⚡ CELL CONTEXT');
|
|
102
|
+
expect(out).toContain('📦 PROJECT');
|
|
103
|
+
});
|
|
104
|
+
it('@cell block works for cell-block token', () => {
|
|
105
|
+
const ctx = (0, prompt_builder_1.buildContext)('fivo-cell', 'cell-block');
|
|
106
|
+
const out = (0, prompt_builder_1.formatContextForTool)(ctx, 'cell-block');
|
|
107
|
+
expect(out).toContain('⚡ CELL CONTEXT');
|
|
108
|
+
expect(out).toContain('📦 PROJECT');
|
|
67
109
|
});
|
|
68
110
|
it('Cursor format: structured, no narrative, focused on hot files + style + decisions', () => {
|
|
69
111
|
const ctx = (0, prompt_builder_1.buildContext)('fivo-cell', 'cursor');
|
|
@@ -98,8 +140,9 @@ describe('tool-specific formatting (Unit 2.5)', () => {
|
|
|
98
140
|
it('Unknown tool: falls back to @cell block', () => {
|
|
99
141
|
const ctx = (0, prompt_builder_1.buildContext)('fivo-cell', 'unknown-tool');
|
|
100
142
|
const out = (0, prompt_builder_1.formatContextForTool)(ctx, 'unknown-tool');
|
|
101
|
-
|
|
102
|
-
expect(out).toContain('
|
|
143
|
+
// Falls back to the new visual @cell block
|
|
144
|
+
expect(out).toContain('⚡ CELL CONTEXT');
|
|
145
|
+
expect(out).toContain('📦 PROJECT');
|
|
103
146
|
});
|
|
104
147
|
it('formatContextForTool is case-insensitive', () => {
|
|
105
148
|
const ctx = (0, prompt_builder_1.buildContext)('fivo-cell', 'claude');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-specific-format.test.js","sourceRoot":"","sources":["../../src/__tests__/tool-specific-format.test.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tool-specific-format.test.js","sourceRoot":"","sources":["../../src/__tests__/tool-specific-format.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -87,4 +87,34 @@ export declare function getBehaviorSummary(project?: string): {
|
|
|
87
87
|
currentContext: ReturnType<typeof getCurrentContext>;
|
|
88
88
|
stuckIssues: ReturnType<typeof getStuckPatterns>;
|
|
89
89
|
};
|
|
90
|
+
/**
|
|
91
|
+
* Get the most-recently-touched file in a project, with timestamp + touch count.
|
|
92
|
+
* Source of truth: session_files table (updated by live-watcher on every file_save).
|
|
93
|
+
* Returns null if no files have been touched yet.
|
|
94
|
+
*/
|
|
95
|
+
export declare function getLastTouchedFile(project?: string): {
|
|
96
|
+
file: string;
|
|
97
|
+
lastTouched: string;
|
|
98
|
+
touchCount: number;
|
|
99
|
+
} | null;
|
|
100
|
+
/**
|
|
101
|
+
* Count detected patterns for a project, split by category.
|
|
102
|
+
* Mirrors what the @cell block displays under "Patterns detected: N".
|
|
103
|
+
*/
|
|
104
|
+
export declare function getPatternCounts(project?: string): {
|
|
105
|
+
total: number;
|
|
106
|
+
byCategory: Record<string, number>;
|
|
107
|
+
};
|
|
108
|
+
/**
|
|
109
|
+
* Get the most recent decisions for a project (with formatted "X minutes ago" string).
|
|
110
|
+
* Default limit 5 — matches what `cell status --decisions` displays.
|
|
111
|
+
*/
|
|
112
|
+
export declare function getRecentDecisionsWithAgo(project?: string, limit?: number): Array<{
|
|
113
|
+
id: number;
|
|
114
|
+
file: string;
|
|
115
|
+
decision: string;
|
|
116
|
+
worked: boolean;
|
|
117
|
+
ago: string;
|
|
118
|
+
decidedAt: string;
|
|
119
|
+
}>;
|
|
90
120
|
//# sourceMappingURL=behavioral-tracker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"behavioral-tracker.d.ts","sourceRoot":"","sources":["../src/behavioral-tracker.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"behavioral-tracker.d.ts","sourceRoot":"","sources":["../src/behavioral-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,9 @@ exports.logStuck = logStuck;
|
|
|
13
13
|
exports.logStuckResolved = logStuckResolved;
|
|
14
14
|
exports.getStuckPatterns = getStuckPatterns;
|
|
15
15
|
exports.getBehaviorSummary = getBehaviorSummary;
|
|
16
|
+
exports.getLastTouchedFile = getLastTouchedFile;
|
|
17
|
+
exports.getPatternCounts = getPatternCounts;
|
|
18
|
+
exports.getRecentDecisionsWithAgo = getRecentDecisionsWithAgo;
|
|
16
19
|
const database_1 = require("./core/database");
|
|
17
20
|
function initBehaviorTables() {
|
|
18
21
|
const db = (0, database_1.getDb)();
|
|
@@ -182,4 +185,88 @@ function getBehaviorSummary(project) {
|
|
|
182
185
|
stuckIssues: getStuckPatterns(project),
|
|
183
186
|
};
|
|
184
187
|
}
|
|
188
|
+
// ─── Pre-Launch Test Suite helpers ──────────────────────────────────────────
|
|
189
|
+
/**
|
|
190
|
+
* Get the most-recently-touched file in a project, with timestamp + touch count.
|
|
191
|
+
* Source of truth: session_files table (updated by live-watcher on every file_save).
|
|
192
|
+
* Returns null if no files have been touched yet.
|
|
193
|
+
*/
|
|
194
|
+
function getLastTouchedFile(project) {
|
|
195
|
+
const db = (0, database_1.getDb)();
|
|
196
|
+
const where = project ? 'WHERE project = ?' : '';
|
|
197
|
+
const params = project ? [project] : [];
|
|
198
|
+
const row = db.prepare(`
|
|
199
|
+
SELECT file_path as file, last_touched as lastTouched, touch_count as touchCount
|
|
200
|
+
FROM session_files ${where}
|
|
201
|
+
ORDER BY last_touched DESC LIMIT 1
|
|
202
|
+
`).get(...params);
|
|
203
|
+
if (!row)
|
|
204
|
+
return null;
|
|
205
|
+
return row;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Count detected patterns for a project, split by category.
|
|
209
|
+
* Mirrors what the @cell block displays under "Patterns detected: N".
|
|
210
|
+
*/
|
|
211
|
+
function getPatternCounts(project) {
|
|
212
|
+
try {
|
|
213
|
+
const db = (0, database_1.getDb)();
|
|
214
|
+
const where = project ? 'WHERE project = ?' : '';
|
|
215
|
+
const params = project ? [project] : [];
|
|
216
|
+
const rows = db.prepare(`
|
|
217
|
+
SELECT category, COUNT(*) as cnt
|
|
218
|
+
FROM code_patterns ${where}
|
|
219
|
+
GROUP BY category
|
|
220
|
+
`).all(...params);
|
|
221
|
+
const byCategory = {};
|
|
222
|
+
let total = 0;
|
|
223
|
+
for (const r of rows) {
|
|
224
|
+
byCategory[r.category || 'unknown'] = Number(r.cnt);
|
|
225
|
+
total += Number(r.cnt);
|
|
226
|
+
}
|
|
227
|
+
return { total, byCategory };
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
return { total: 0, byCategory: {} };
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Get the most recent decisions for a project (with formatted "X minutes ago" string).
|
|
235
|
+
* Default limit 5 — matches what `cell status --decisions` displays.
|
|
236
|
+
*/
|
|
237
|
+
function getRecentDecisionsWithAgo(project, limit = 5) {
|
|
238
|
+
const rows = getDecisions(project, limit);
|
|
239
|
+
const now = Date.now();
|
|
240
|
+
return rows.map(r => {
|
|
241
|
+
const ts = new Date(r.decidedAt).getTime();
|
|
242
|
+
const diffMs = now - ts;
|
|
243
|
+
return {
|
|
244
|
+
id: r.id,
|
|
245
|
+
file: r.file,
|
|
246
|
+
decision: r.decision,
|
|
247
|
+
// SQLite returns worked as 0/1 integer; coerce to boolean
|
|
248
|
+
worked: Boolean(r.worked),
|
|
249
|
+
ago: formatAgo(diffMs),
|
|
250
|
+
decidedAt: r.decidedAt,
|
|
251
|
+
};
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
function formatAgo(ms) {
|
|
255
|
+
if (ms < 0)
|
|
256
|
+
return 'just now';
|
|
257
|
+
const sec = Math.floor(ms / 1000);
|
|
258
|
+
if (sec < 60)
|
|
259
|
+
return `${sec} second${sec === 1 ? '' : 's'} ago`;
|
|
260
|
+
const min = Math.floor(sec / 60);
|
|
261
|
+
if (min < 60)
|
|
262
|
+
return `${min} minute${min === 1 ? '' : 's'} ago`;
|
|
263
|
+
const hr = Math.floor(min / 60);
|
|
264
|
+
if (hr < 24)
|
|
265
|
+
return `${hr} hour${hr === 1 ? '' : 's'} ago`;
|
|
266
|
+
const day = Math.floor(hr / 24);
|
|
267
|
+
if (day < 30)
|
|
268
|
+
return `${day} day${day === 1 ? '' : 's'} ago`;
|
|
269
|
+
const month = Math.floor(day / 30);
|
|
270
|
+
return `${month} month${month === 1 ? '' : 's'} ago`;
|
|
271
|
+
}
|
|
185
272
|
//# sourceMappingURL=behavioral-tracker.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"behavioral-tracker.js","sourceRoot":"","sources":["../src/behavioral-tracker.ts"],"names":[],"mappings":";;AAEA,gDAiDC;AAID,4BAaC;AAED,kCAUC;AAED,4CA0BC;AAED,0CA2BC;AAID,kCAeC;AAED,oCA4BC;AAID,gCAYC;AAED,8CAgBC;AAID,4BAWC;AAED,4CAGC;AAED,4CAsBC;AAID,gDAyBC;
|
|
1
|
+
{"version":3,"file":"behavioral-tracker.js","sourceRoot":"","sources":["../src/behavioral-tracker.ts"],"names":[],"mappings":";;AAEA,gDAiDC;AAID,4BAaC;AAED,kCAUC;AAED,4CA0BC;AAED,0CA2BC;AAID,kCAeC;AAED,oCA4BC;AAID,gCAYC;AAED,8CAgBC;AAID,4BAWC;AAED,4CAGC;AAED,4CAsBC;AAID,gDAyBC;AASD,gDAeC;AAMD,4CAuBC;AAMD,8DAuBC;AAvXD,8CAAwC;AAExC,SAAgB,kBAAkB;IAChC,MAAM,EAAE,GAAG,IAAA,gBAAK,GAAE,CAAC;IACnB,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CP,CAAC,CAAC;AACL,CAAC;AAED,gFAAgF;AAEhF,SAAgB,QAAQ,CAAC,IAMxB;IACC,MAAM,EAAE,GAAG,IAAA,gBAAK,GAAE,CAAC;IACnB,kBAAkB,EAAE,CAAC;IACrB,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAClB,2GAA2G,CAC5G,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE,IAAI,CAAC,YAAY,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IAC1G,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC;AAC3C,CAAC;AAED,SAAgB,WAAW,CAAC,IAK3B;IACC,MAAM,EAAE,GAAG,IAAA,gBAAK,GAAE,CAAC;IACnB,EAAE,CAAC,OAAO,CACR,uFAAuF,CACxF,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AACnF,CAAC;AAED,SAAgB,gBAAgB,CAAC,OAAgB;IAO/C,MAAM,EAAE,GAAG,IAAA,gBAAK,GAAE,CAAC;IACnB,kBAAkB,EAAE,CAAC;IACrB,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;IACjD,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxC,OAAO,EAAE,CAAC,OAAO,CAAC;;;;;qBAKC,KAAK;;;GAGvB,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAMd,CAAC;AACL,CAAC;AAED,SAAgB,eAAe,CAAC,QAAgB,EAAE,EAAE,OAAgB;IASlE,MAAM,EAAE,GAAG,IAAA,gBAAK,GAAE,CAAC;IACnB,kBAAkB,EAAE,CAAC;IACrB,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;IACjD,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACpD,OAAO,EAAE,CAAC,OAAO,CAAC;;;qBAGC,KAAK;;GAEvB,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAQd,CAAC;AACL,CAAC;AAED,gFAAgF;AAEhF,SAAgB,WAAW,CAAC,IAQ3B;IACC,MAAM,EAAE,GAAG,IAAA,gBAAK,GAAE,CAAC;IACnB,kBAAkB,EAAE,CAAC;IACrB,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAClB,yHAAyH,CAC1H,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;IAC3I,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC;AAC3C,CAAC;AAED,SAAgB,YAAY,CAAC,OAAgB,EAAE,QAAgB,EAAE;IAU/D,MAAM,EAAE,GAAG,IAAA,gBAAK,GAAE,CAAC;IACnB,kBAAkB,EAAE,CAAC;IACrB,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;IACjD,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACpD,OAAO,EAAE,CAAC,OAAO,CAAC;;wBAEI,KAAK;;GAE1B,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CASd,CAAC;AACL,CAAC;AAED,gFAAgF;AAEhF,SAAgB,UAAU,CAAC,IAI1B;IACC,MAAM,EAAE,GAAG,IAAA,gBAAK,GAAE,CAAC;IACnB,kBAAkB,EAAE,CAAC;IACrB,EAAE,CAAC,OAAO,CAAC,oDAAoD,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IACzF,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAClB,kFAAkF,CACnF,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;IACvE,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC;AAC3C,CAAC;AAED,SAAgB,iBAAiB,CAAC,OAAgB;IAKhD,MAAM,EAAE,GAAG,IAAA,gBAAK,GAAE,CAAC;IACnB,kBAAkB,EAAE,CAAC;IACrB,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC,CAAC,kBAAkB,CAAC;IAChF,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC1D,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC;;uBAEF,KAAK;;GAEzB,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAmE,CAAC;IACpF,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,CAAC;AAC5F,CAAC;AAED,gFAAgF;AAEhF,SAAgB,QAAQ,CAAC,IAIxB;IACC,MAAM,EAAE,GAAG,IAAA,gBAAK,GAAE,CAAC;IACnB,kBAAkB,EAAE,CAAC;IACrB,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAClB,0EAA0E,CAC3E,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC7D,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,EAAE,CAAC;AAC3C,CAAC;AAED,SAAgB,gBAAgB,CAAC,OAAe,EAAE,UAAkB;IAClE,MAAM,EAAE,GAAG,IAAA,gBAAK,GAAE,CAAC;IACnB,EAAE,CAAC,OAAO,CAAC,gEAAgE,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACxG,CAAC;AAED,SAAgB,gBAAgB,CAAC,OAAgB;IAO/C,MAAM,EAAE,GAAG,IAAA,gBAAK,GAAE,CAAC;IACnB,kBAAkB,EAAE,CAAC;IACrB,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;IACjD,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxC,OAAO,EAAE,CAAC,OAAO,CAAC;;qBAEC,KAAK;;GAEvB,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAMd,CAAC;AACL,CAAC;AAED,gFAAgF;AAEhF,SAAgB,kBAAkB,CAAC,OAAgB;IASjD,MAAM,EAAE,GAAG,IAAA,gBAAK,GAAE,CAAC;IACnB,kBAAkB,EAAE,CAAC;IACrB,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;IACjD,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxC,MAAM,WAAW,GAAI,EAAE,CAAC,OAAO,CAAC,uCAAuC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAmB,CAAC,CAAC,CAAC;IACnH,MAAM,cAAc,GAAI,EAAE,CAAC,OAAO,CAAC,0CAA0C,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAmB,CAAC,CAAC,CAAC;IAEzH,OAAO;QACL,WAAW;QACX,aAAa,EAAE,gBAAgB,CAAC,OAAO,CAAC;QACxC,YAAY,EAAE,eAAe,CAAC,CAAC,EAAE,OAAO,CAAC;QACzC,cAAc;QACd,eAAe,EAAE,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC;QACzC,cAAc,EAAE,iBAAiB,CAAC,OAAO,CAAC;QAC1C,WAAW,EAAE,gBAAgB,CAAC,OAAO,CAAC;KACvC,CAAC;AACJ,CAAC;AAED,+EAA+E;AAE/E;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,OAAgB;IAKjD,MAAM,EAAE,GAAG,IAAA,gBAAK,GAAE,CAAC;IACnB,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;IACjD,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACxC,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC;;yBAEA,KAAK;;GAE3B,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAA0E,CAAC;IAC3F,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,OAAgB;IAI/C,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,IAAA,gBAAK,GAAE,CAAC;QACnB,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC;;2BAED,KAAK;;KAE3B,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAA6C,CAAC;QAC9D,MAAM,UAAU,GAA2B,EAAE,CAAC;QAC9C,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,UAAU,CAAC,CAAC,CAAC,QAAQ,IAAI,SAAS,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACpD,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IACtC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAgB,yBAAyB,CAAC,OAAgB,EAAE,KAAK,GAAG,CAAC;IAQnE,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACvB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QAClB,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,GAAG,GAAG,EAAE,CAAC;QACxB,OAAO;YACL,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,QAAQ,EAAE,CAAC,CAAC,QAAQ;YACpB,0DAA0D;YAC1D,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;YACzB,GAAG,EAAE,SAAS,CAAC,MAAM,CAAC;YACtB,SAAS,EAAE,CAAC,CAAC,SAAS;SACvB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAAC,EAAU;IAC3B,IAAI,EAAE,GAAG,CAAC;QAAE,OAAO,UAAU,CAAC;IAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;IAClC,IAAI,GAAG,GAAG,EAAE;QAAE,OAAO,GAAG,GAAG,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;IAChE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;IACjC,IAAI,GAAG,GAAG,EAAE;QAAE,OAAO,GAAG,GAAG,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;IAChE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;IAChC,IAAI,EAAE,GAAG,EAAE;QAAE,OAAO,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;IAC3D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IAChC,IAAI,GAAG,GAAG,EAAE;QAAE,OAAO,GAAG,GAAG,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;IAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;IACnC,OAAO,GAAG,KAAK,SAAS,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;AACvD,CAAC"}
|
package/dist/cli.js
CHANGED
|
@@ -102,6 +102,12 @@ switch (cmd) {
|
|
|
102
102
|
case 'status':
|
|
103
103
|
doStatus();
|
|
104
104
|
break;
|
|
105
|
+
case 'session':
|
|
106
|
+
doSession();
|
|
107
|
+
break;
|
|
108
|
+
case 'decisions':
|
|
109
|
+
doDecisions();
|
|
110
|
+
break;
|
|
105
111
|
case 'team':
|
|
106
112
|
doTeam();
|
|
107
113
|
break;
|
|
@@ -316,6 +322,18 @@ function semiLabel(s) {
|
|
|
316
322
|
return s;
|
|
317
323
|
}
|
|
318
324
|
function doStatus() {
|
|
325
|
+
// ─── Flag passthroughs (Pre-Launch Test 1 + Test 3) ────────────────────
|
|
326
|
+
// Allow `cell status --session` and `cell status --decisions` as
|
|
327
|
+
// documented in the pre-launch test suite. The dedicated `cell session`
|
|
328
|
+
// and `cell decisions` top-level commands still work.
|
|
329
|
+
if (args[1] === '--session') {
|
|
330
|
+
doSession();
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
if (args[1] === '--decisions') {
|
|
334
|
+
doDecisions();
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
319
337
|
const banner = figlet_1.default.textSync('CELL', { font: 'ANSI Shadow', horizontalLayout: 'fitted' });
|
|
320
338
|
console.log((0, gradient_string_1.default)(['#FF6B35', '#FFAB91'])(banner));
|
|
321
339
|
console.log();
|
|
@@ -491,6 +509,92 @@ function showProjectStatus() {
|
|
|
491
509
|
}
|
|
492
510
|
console.log();
|
|
493
511
|
}
|
|
512
|
+
// ─── cell status --session (Pre-Launch Test 1) ──────────────────────────────
|
|
513
|
+
function doSession() {
|
|
514
|
+
console.log();
|
|
515
|
+
console.log(C.bold(' Cell Session — Last Activity'));
|
|
516
|
+
console.log(C.dim(' ───────────────────────────────'));
|
|
517
|
+
console.log();
|
|
518
|
+
try {
|
|
519
|
+
const { getLastTouchedFile, getPatternCounts, getBehaviorSummary } = require('./behavioral-tracker');
|
|
520
|
+
const last = getLastTouchedFile(project);
|
|
521
|
+
const patterns = getPatternCounts(project);
|
|
522
|
+
const behavior = getBehaviorSummary(project);
|
|
523
|
+
if (last) {
|
|
524
|
+
const ago = formatTimeAgo(new Date(last.lastTouched).getTime());
|
|
525
|
+
console.log(` Last file: ${C.num(last.file)}`);
|
|
526
|
+
console.log(` Time: ${ago} (${last.touchCount} touch${last.touchCount === 1 ? '' : 'es'})`);
|
|
527
|
+
}
|
|
528
|
+
else {
|
|
529
|
+
console.log(C.dim(' Last file: (none yet — save a file to start tracking)'));
|
|
530
|
+
}
|
|
531
|
+
console.log(` Patterns: ${C.num(String(patterns.total))} detected`);
|
|
532
|
+
if (Object.keys(patterns.byCategory).length > 0) {
|
|
533
|
+
const catStr = Object.entries(patterns.byCategory)
|
|
534
|
+
.slice(0, 5)
|
|
535
|
+
.map(([cat, n]) => `${cat}=${n}`)
|
|
536
|
+
.join(', ');
|
|
537
|
+
console.log(C.dim(` ${catStr}`));
|
|
538
|
+
}
|
|
539
|
+
if (behavior.currentContext) {
|
|
540
|
+
console.log(` Current task: ${C.num(behavior.currentContext.task)}`);
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
catch (err) {
|
|
544
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
545
|
+
console.log(C.warn(` Session lookup failed: ${msg}`));
|
|
546
|
+
}
|
|
547
|
+
console.log();
|
|
548
|
+
}
|
|
549
|
+
// ─── cell status --decisions (Pre-Launch Test 3) ────────────────────────────
|
|
550
|
+
function doDecisions() {
|
|
551
|
+
console.log();
|
|
552
|
+
console.log(C.bold(' Cell Decisions — Recent Activity'));
|
|
553
|
+
console.log(C.dim(' ─────────────────────────────────'));
|
|
554
|
+
console.log();
|
|
555
|
+
try {
|
|
556
|
+
const { getRecentDecisionsWithAgo, getBehaviorSummary } = require('./behavioral-tracker');
|
|
557
|
+
const decisions = getRecentDecisionsWithAgo(project, 5);
|
|
558
|
+
const behavior = getBehaviorSummary(project);
|
|
559
|
+
if (decisions.length === 0) {
|
|
560
|
+
console.log(C.dim(' No decisions logged yet.'));
|
|
561
|
+
console.log(C.dim(' Decisions are auto-logged when AI suggestions are accepted/rejected in your IDE.'));
|
|
562
|
+
}
|
|
563
|
+
else {
|
|
564
|
+
for (const d of decisions) {
|
|
565
|
+
const verdict = d.worked ? C.success('Accepted') : C.warn('Rejected');
|
|
566
|
+
console.log(` ${verdict} ${d.decision}`);
|
|
567
|
+
console.log(C.dim(` ${d.ago}${d.file ? ' · ' + d.file : ''}`));
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
console.log();
|
|
571
|
+
console.log(C.dim(` Total: ${behavior.totalDecisions} decision${behavior.totalDecisions === 1 ? '' : 's'} logged`));
|
|
572
|
+
}
|
|
573
|
+
catch (err) {
|
|
574
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
575
|
+
console.log(C.warn(` Decisions lookup failed: ${msg}`));
|
|
576
|
+
}
|
|
577
|
+
console.log();
|
|
578
|
+
}
|
|
579
|
+
function formatTimeAgo(ts) {
|
|
580
|
+
const diff = Date.now() - ts;
|
|
581
|
+
if (diff < 0)
|
|
582
|
+
return 'just now';
|
|
583
|
+
const sec = Math.floor(diff / 1000);
|
|
584
|
+
if (sec < 60)
|
|
585
|
+
return `${sec} second${sec === 1 ? '' : 's'} ago`;
|
|
586
|
+
const min = Math.floor(sec / 60);
|
|
587
|
+
if (min < 60)
|
|
588
|
+
return `${min} minute${min === 1 ? '' : 's'} ago`;
|
|
589
|
+
const hr = Math.floor(min / 60);
|
|
590
|
+
if (hr < 24)
|
|
591
|
+
return `${hr} hour${hr === 1 ? '' : 's'} ago`;
|
|
592
|
+
const day = Math.floor(hr / 24);
|
|
593
|
+
if (day < 30)
|
|
594
|
+
return `${day} day${day === 1 ? '' : 's'} ago`;
|
|
595
|
+
const month = Math.floor(day / 30);
|
|
596
|
+
return `${month} month${month === 1 ? '' : 's'} ago`;
|
|
597
|
+
}
|
|
494
598
|
// ─── cell team ──────────────────────────────────────────────────────────────
|
|
495
599
|
function doTeam() {
|
|
496
600
|
console.log();
|
|
@@ -1056,7 +1160,7 @@ function doContext() {
|
|
|
1056
1160
|
try {
|
|
1057
1161
|
const { buildContext, formatContextForTool } = require('./core/prompt-builder');
|
|
1058
1162
|
ctx = buildContext(projectArg, toolArg);
|
|
1059
|
-
const text = formatContextForTool(ctx, toolArg);
|
|
1163
|
+
const text = formatContextForTool(ctx, toolArg, projectArg);
|
|
1060
1164
|
console.log(text);
|
|
1061
1165
|
}
|
|
1062
1166
|
catch (e) {
|
|
@@ -1076,6 +1180,10 @@ function doHelp() {
|
|
|
1076
1180
|
console.log(` ${C.primary('cell scan')} Scan codebase + build layers`);
|
|
1077
1181
|
console.log(` ${C.primary('cell analyze')} AI prompts from scan data`);
|
|
1078
1182
|
console.log(` ${C.primary('cell status')} What Cell knows about you`);
|
|
1183
|
+
console.log(` ${C.primary('cell status --session')} Last touched file + patterns (Pre-Launch Test 1)`);
|
|
1184
|
+
console.log(` ${C.primary('cell status --decisions')} Recent decisions with verdict (Pre-Launch Test 3)`);
|
|
1185
|
+
console.log(` ${C.primary('cell session')} Same as cell status --session`);
|
|
1186
|
+
console.log(` ${C.primary('cell decisions')} Same as cell status --decisions`);
|
|
1079
1187
|
console.log(` ${C.primary('cell team')} Team collaboration (git-based)`);
|
|
1080
1188
|
console.log(` ${C.primary('cell community')} Community patterns + benchmarks`);
|
|
1081
1189
|
console.log(` ${C.primary('cell watch [start|stop|events|check|status] [proj] [dir]')} Live file watcher`);
|