@aethrekh/pi-cs 0.1.2 → 0.1.4
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/CHANGELOG.md +31 -0
- package/README.md +12 -0
- package/extensions/folder-detector.d.ts +2 -0
- package/extensions/folder-detector.d.ts.map +1 -1
- package/extensions/folder-detector.js +14 -0
- package/extensions/folder-detector.js.map +1 -1
- package/extensions/integrity-guard.d.ts +2 -0
- package/extensions/integrity-guard.d.ts.map +1 -1
- package/extensions/integrity-guard.js +16 -0
- package/extensions/integrity-guard.js.map +1 -1
- package/extensions/progress-tracker.d.ts +2 -0
- package/extensions/progress-tracker.d.ts.map +1 -1
- package/extensions/progress-tracker.js +54 -0
- package/extensions/progress-tracker.js.map +1 -1
- package/extensions/semester-detector.d.ts +2 -0
- package/extensions/semester-detector.d.ts.map +1 -1
- package/extensions/semester-detector.js +76 -0
- package/extensions/semester-detector.js.map +1 -1
- package/package.json +1 -1
- package/pi-cs.meta.json +2 -2
- package/pi-package.yaml +2 -2
- package/extensions/index.d.ts +0 -12
- package/extensions/index.d.ts.map +0 -1
- package/extensions/index.js +0 -227
- package/extensions/index.js.map +0 -1
- /package/{system.md → SYSTEM.md} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,37 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
+
* chore: release v0.1.4 (274b87a)
|
|
11
|
+
* fix: copy SYSTEM.md (uppercase) in pack script (d76fe7d)
|
|
12
|
+
* refactor: split monolithic index.ts into four real Pi extension factories (e0dd78a)
|
|
13
|
+
* refactor: install Pisces persona via APPEND_SYSTEM.md instead of per-turn injection (4ed08c4)
|
|
14
|
+
* fix: inject Pisces persona via before_agent_start hook (4c04728)
|
|
15
|
+
* fix: correct system prompt path casing and enforce it in validate (98da376)
|
|
16
|
+
* chore: add star History section (6418c8c)
|
|
17
|
+
|
|
18
|
+
## [0.1.4](https://github.com/AshishBagdane/pi-cs/compare/v0.1.3...v0.1.4) (2026-06-04)
|
|
19
|
+
|
|
20
|
+
### ### Fixed
|
|
21
|
+
|
|
22
|
+
* copy SYSTEM.md (uppercase) in pack script ([d76fe7d](https://github.com/AshishBagdane/pi-cs/commit/d76fe7da07d919fb9020c79777a2bc6ea63f88d4))
|
|
23
|
+
* correct system prompt path casing and enforce it in validate ([98da376](https://github.com/AshishBagdane/pi-cs/commit/98da3769b5bf7ea734746efd433d038ffed132a9))
|
|
24
|
+
* inject Pisces persona via before_agent_start hook ([4c04728](https://github.com/AshishBagdane/pi-cs/commit/4c047282bb0203c8abaaf10688b58089f85c7c81))
|
|
25
|
+
|
|
26
|
+
### ### Changed
|
|
27
|
+
|
|
28
|
+
* install Pisces persona via APPEND_SYSTEM.md instead of per-turn injection ([4ed08c4](https://github.com/AshishBagdane/pi-cs/commit/4ed08c434acf77eeafca03aa5c303c6edc1b3557))
|
|
29
|
+
* split monolithic index.ts into four real Pi extension factories ([e0dd78a](https://github.com/AshishBagdane/pi-cs/commit/e0dd78a4117f96e5e525396310616c3b111445c7))
|
|
30
|
+
|
|
31
|
+
## [0.1.3](https://github.com/AshishBagdane/pi-cs/compare/v0.1.2...v0.1.3) (2026-06-02)
|
|
32
|
+
|
|
33
|
+
### ### Fixed
|
|
34
|
+
|
|
35
|
+
* wire session_shutdown to persist session records via progress tracker ([0925eec](https://github.com/AshishBagdane/pi-cs/commit/0925eec5c9d2992e53954b3e67b70107e8c16ce5))
|
|
36
|
+
|
|
37
|
+
### ### Changed
|
|
38
|
+
|
|
39
|
+
* improve CLAUDE.md with runtime extension architecture and dev recipes ([ef5fea6](https://github.com/AshishBagdane/pi-cs/commit/ef5fea6ad389420341a773b748b9a5b1286abca5))
|
|
40
|
+
|
|
10
41
|
## 0.1.2 (2026-06-02)
|
|
11
42
|
|
|
12
43
|
### Added
|
package/README.md
CHANGED
|
@@ -265,3 +265,15 @@ MIT — see [LICENSE](LICENSE)
|
|
|
265
265
|
---
|
|
266
266
|
|
|
267
267
|
*Made for CS students, by CS students. <img src="public/pisces-logo-32.png" height="18" align="center" alt="Pisces">*
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
## Star History
|
|
272
|
+
|
|
273
|
+
<a href="https://www.star-history.com/?repos=AshishBagdane%2Fpi-cs&type=date&legend=top-left">
|
|
274
|
+
<picture>
|
|
275
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=AshishBagdane/pi-cs&type=date&theme=dark&legend=top-left" />
|
|
276
|
+
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=AshishBagdane/pi-cs&type=date&legend=top-left" />
|
|
277
|
+
<img alt="Star History Chart" src="https://api.star-history.com/chart?repos=AshishBagdane/pi-cs&type=date&legend=top-left" />
|
|
278
|
+
</picture>
|
|
279
|
+
</a>
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* Detects standard CS university folder structures and injects
|
|
8
8
|
* project context into the Pi session accordingly.
|
|
9
9
|
*/
|
|
10
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
10
11
|
export type ProjectType = "python" | "typescript" | "java" | "cpp" | "rust" | "go" | "web" | "monorepo" | "unknown";
|
|
11
12
|
export interface ProjectContext {
|
|
12
13
|
type: ProjectType;
|
|
@@ -28,6 +29,7 @@ export interface FolderDetectionResult {
|
|
|
28
29
|
}
|
|
29
30
|
export declare function detectFolderContext(): FolderDetectionResult;
|
|
30
31
|
export declare function summarizeFolderContext(result: FolderDetectionResult): string;
|
|
32
|
+
export default function (pi: ExtensionAPI): void;
|
|
31
33
|
export declare function run(): {
|
|
32
34
|
inject: string;
|
|
33
35
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"folder-detector.d.ts","sourceRoot":"","sources":["../../src/extensions/folder-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"folder-detector.d.ts","sourceRoot":"","sources":["../../src/extensions/folder-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAMpE,MAAM,MAAM,WAAW,GACnB,QAAQ,GACR,YAAY,GACZ,MAAM,GACN,KAAK,GACL,MAAM,GACN,IAAI,GACJ,KAAK,GACL,UAAU,GACV,SAAS,CAAC;AAEd,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B;AA+FD,wBAAgB,mBAAmB,IAAI,qBAAqB,CAmC3D;AAID,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM,CAmB5E;AAID,MAAM,CAAC,OAAO,WAAW,EAAE,EAAE,YAAY,QAYxC;AAID,wBAAgB,GAAG,IAAI;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CASxC"}
|
|
@@ -44,6 +44,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
44
44
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
45
|
exports.detectFolderContext = detectFolderContext;
|
|
46
46
|
exports.summarizeFolderContext = summarizeFolderContext;
|
|
47
|
+
exports.default = default_1;
|
|
47
48
|
exports.run = run;
|
|
48
49
|
const fs = __importStar(require("fs"));
|
|
49
50
|
const path = __importStar(require("path"));
|
|
@@ -185,6 +186,19 @@ function summarizeFolderContext(result) {
|
|
|
185
186
|
}
|
|
186
187
|
return lines.join("\n");
|
|
187
188
|
}
|
|
189
|
+
// ─── Pi Extension Factory ──────────────────────────────────────────────────
|
|
190
|
+
function default_1(pi) {
|
|
191
|
+
let contextSummary = "";
|
|
192
|
+
pi.on("session_start", async () => {
|
|
193
|
+
const result = detectFolderContext();
|
|
194
|
+
contextSummary = summarizeFolderContext(result);
|
|
195
|
+
});
|
|
196
|
+
pi.on("before_agent_start", async (event) => {
|
|
197
|
+
if (!contextSummary)
|
|
198
|
+
return;
|
|
199
|
+
return { systemPrompt: `${event.systemPrompt}\n\n${contextSummary}` };
|
|
200
|
+
});
|
|
201
|
+
}
|
|
188
202
|
// ─── Pi Extension Entry Point ──────────────────────────────────────────────
|
|
189
203
|
function run() {
|
|
190
204
|
const result = detectFolderContext();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"folder-detector.js","sourceRoot":"","sources":["../../src/extensions/folder-detector.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"folder-detector.js","sourceRoot":"","sources":["../../src/extensions/folder-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* Monitors skill calls for academic integrity risk patterns.
|
|
8
8
|
* Injects appropriate warnings and mode adjustments into the session.
|
|
9
9
|
*/
|
|
10
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
10
11
|
export type IntegrityRisk = "none" | "low" | "medium" | "high";
|
|
11
12
|
export interface IntegrityCheckResult {
|
|
12
13
|
risk: IntegrityRisk;
|
|
@@ -15,6 +16,7 @@ export interface IntegrityCheckResult {
|
|
|
15
16
|
shouldAskUser?: boolean;
|
|
16
17
|
}
|
|
17
18
|
export declare function checkIntegrityRisk(userInput: string, skillName: string): IntegrityCheckResult;
|
|
19
|
+
export default function (pi: ExtensionAPI): void;
|
|
18
20
|
export declare function run(context: {
|
|
19
21
|
skillName: string;
|
|
20
22
|
userInput: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integrity-guard.d.ts","sourceRoot":"","sources":["../../src/extensions/integrity-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"integrity-guard.d.ts","sourceRoot":"","sources":["../../src/extensions/integrity-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAIpE,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE/D,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,aAAa,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAwCD,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,oBAAoB,CAmCtB;AA6BD,MAAM,CAAC,OAAO,WAAW,EAAE,EAAE,YAAY,QAexC;AAID,wBAAgB,GAAG,CAAC,OAAO,EAAE;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAkBrC"}
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
exports.checkIntegrityRisk = checkIntegrityRisk;
|
|
13
|
+
exports.default = default_1;
|
|
13
14
|
exports.run = run;
|
|
14
15
|
// ─── Risk Signals ──────────────────────────────────────────────────────────
|
|
15
16
|
// High-risk: user is likely asking for submission-ready work
|
|
@@ -98,6 +99,21 @@ function buildMediumRiskWarning() {
|
|
|
98
99
|
|
|
99
100
|
Just let me know!`;
|
|
100
101
|
}
|
|
102
|
+
// ─── Pi Extension Factory ──────────────────────────────────────────────────
|
|
103
|
+
function default_1(pi) {
|
|
104
|
+
pi.on("input", async (event) => {
|
|
105
|
+
const skillMatch = event.text.match(/^\/skill:(\w+)/);
|
|
106
|
+
const skillName = skillMatch?.[1] ?? "";
|
|
107
|
+
const result = checkIntegrityRisk(event.text, skillName);
|
|
108
|
+
if (result.warning) {
|
|
109
|
+
pi.sendUserMessage(result.warning);
|
|
110
|
+
return result.risk === "high"
|
|
111
|
+
? { action: "handled" }
|
|
112
|
+
: { action: "continue" };
|
|
113
|
+
}
|
|
114
|
+
return { action: "continue" };
|
|
115
|
+
});
|
|
116
|
+
}
|
|
101
117
|
// ─── Pi Extension Entry Point ──────────────────────────────────────────────
|
|
102
118
|
function run(context) {
|
|
103
119
|
const result = checkIntegrityRisk(context.userInput, context.skillName);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integrity-guard.js","sourceRoot":"","sources":["../../src/extensions/integrity-guard.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;
|
|
1
|
+
{"version":3,"file":"integrity-guard.js","sourceRoot":"","sources":["../../src/extensions/integrity-guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* Tracks weekly activity across skills and sessions.
|
|
8
8
|
* Surfaces burnout prevention nudges and weekly summaries.
|
|
9
9
|
*/
|
|
10
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
10
11
|
export interface SessionRecord {
|
|
11
12
|
date: string;
|
|
12
13
|
durationMinutes: number;
|
|
@@ -22,6 +23,7 @@ export interface WeeklyStats {
|
|
|
22
23
|
}
|
|
23
24
|
export declare function getBurnoutNudge(sessionDurationMinutes: number, stats: WeeklyStats): string | null;
|
|
24
25
|
export declare function buildWeeklySummary(stats: WeeklyStats): string;
|
|
26
|
+
export default function (pi: ExtensionAPI): void;
|
|
25
27
|
export declare function run(context: {
|
|
26
28
|
sessionDurationMinutes: number;
|
|
27
29
|
skillsUsed: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progress-tracker.d.ts","sourceRoot":"","sources":["../../src/extensions/progress-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"progress-tracker.d.ts","sourceRoot":"","sources":["../../src/extensions/progress-tracker.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAQpE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAgFD,wBAAgB,eAAe,CAC7B,sBAAsB,EAAE,MAAM,EAC9B,KAAK,EAAE,WAAW,GACjB,MAAM,GAAG,IAAI,CAiBf;AAID,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CA6B7D;AAID,MAAM,CAAC,OAAO,WAAW,EAAE,EAAE,YAAY,QAyDxC;AAID,wBAAgB,GAAG,CAAC,OAAO,EAAE;IAC3B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB,GAAG;IAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAmBlD"}
|
|
@@ -44,10 +44,12 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
44
44
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
45
|
exports.getBurnoutNudge = getBurnoutNudge;
|
|
46
46
|
exports.buildWeeklySummary = buildWeeklySummary;
|
|
47
|
+
exports.default = default_1;
|
|
47
48
|
exports.run = run;
|
|
48
49
|
const fs = __importStar(require("fs"));
|
|
49
50
|
const path = __importStar(require("path"));
|
|
50
51
|
const os = __importStar(require("os"));
|
|
52
|
+
const semester_detector_1 = require("./semester-detector");
|
|
51
53
|
// ─── Storage ───────────────────────────────────────────────────────────────
|
|
52
54
|
const TRACKER_DIR = path.join(os.homedir(), ".pi-cs");
|
|
53
55
|
const SESSIONS_FILE = path.join(TRACKER_DIR, "sessions.json");
|
|
@@ -155,6 +157,58 @@ function buildWeeklySummary(stats) {
|
|
|
155
157
|
.filter(Boolean)
|
|
156
158
|
.join("\n");
|
|
157
159
|
}
|
|
160
|
+
// ─── Pi Extension Factory ──────────────────────────────────────────────────
|
|
161
|
+
function default_1(pi) {
|
|
162
|
+
const sessionStart = Date.now();
|
|
163
|
+
const skillsUsed = [];
|
|
164
|
+
pi.on("input", async (event) => {
|
|
165
|
+
const match = event.text.match(/^\/skill:(\w+)/);
|
|
166
|
+
if (match && !skillsUsed.includes(match[1])) {
|
|
167
|
+
skillsUsed.push(match[1]);
|
|
168
|
+
}
|
|
169
|
+
return { action: "continue" };
|
|
170
|
+
});
|
|
171
|
+
pi.on("before_agent_start", async (_event, ctx) => {
|
|
172
|
+
const elapsed = Math.round((Date.now() - sessionStart) / 60000);
|
|
173
|
+
if (elapsed > 0 && elapsed % 180 === 0) {
|
|
174
|
+
ctx.ui.notify(`🐠 You've been at this for ${elapsed} minutes. Take a short break — your brain consolidates learning during rest, not during grinding.`, "info");
|
|
175
|
+
}
|
|
176
|
+
});
|
|
177
|
+
pi.on("session_shutdown", async (_event, ctx) => {
|
|
178
|
+
const durationMinutes = Math.round((Date.now() - sessionStart) / 60000);
|
|
179
|
+
const { nudge, weeklySummary } = run({ sessionDurationMinutes: durationMinutes, skillsUsed });
|
|
180
|
+
if (nudge)
|
|
181
|
+
ctx.ui.notify(nudge, "info");
|
|
182
|
+
if (weeklySummary)
|
|
183
|
+
ctx.ui.notify(weeklySummary, "info");
|
|
184
|
+
});
|
|
185
|
+
pi.registerCommand("pisces", {
|
|
186
|
+
description: "Show Pisces status — semester context, skills used, session duration",
|
|
187
|
+
handler: async (_args, ctx) => {
|
|
188
|
+
const elapsed = Math.round((Date.now() - sessionStart) / 60000);
|
|
189
|
+
const detection = (0, semester_detector_1.detectSemesterContext)();
|
|
190
|
+
const semCtx = detection.context;
|
|
191
|
+
const lines = [
|
|
192
|
+
"🐠 **Pisces Status**",
|
|
193
|
+
"",
|
|
194
|
+
semCtx
|
|
195
|
+
? `📅 ${semCtx.semester} ${semCtx.year}${semCtx.week ? ` — Week ${semCtx.week}` : ""}`
|
|
196
|
+
: "📅 No SEMESTER.md loaded",
|
|
197
|
+
semCtx?.courses?.length
|
|
198
|
+
? `📚 Courses: ${semCtx.courses.map((c) => c.code).join(", ")}`
|
|
199
|
+
: "",
|
|
200
|
+
semCtx?.active_project ? `🔧 Project: ${semCtx.active_project}` : "",
|
|
201
|
+
`⏱ Session: ${elapsed} minute${elapsed !== 1 ? "s" : ""}`,
|
|
202
|
+
skillsUsed.length
|
|
203
|
+
? `🛠 Skills used this session: ${skillsUsed.map((s) => `/skill:${s}`).join(", ")}`
|
|
204
|
+
: "🛠 No skills used yet — try /skill:explain, /skill:homework, or /skill:leetcode",
|
|
205
|
+
]
|
|
206
|
+
.filter(Boolean)
|
|
207
|
+
.join("\n");
|
|
208
|
+
ctx.ui.notify(lines, "info");
|
|
209
|
+
},
|
|
210
|
+
});
|
|
211
|
+
}
|
|
158
212
|
// ─── Pi Extension Entry Point ──────────────────────────────────────────────
|
|
159
213
|
function run(context) {
|
|
160
214
|
const sessions = loadSessions();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"progress-tracker.js","sourceRoot":"","sources":["../../src/extensions/progress-tracker.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"progress-tracker.js","sourceRoot":"","sources":["../../src/extensions/progress-tracker.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* Searches for SEMESTER.md in the working directory and standard university
|
|
8
8
|
* folder locations, then injects the semester context into the Pi session.
|
|
9
9
|
*/
|
|
10
|
+
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
10
11
|
export interface Course {
|
|
11
12
|
code: string;
|
|
12
13
|
name: string;
|
|
@@ -42,6 +43,7 @@ export declare function detectSemesterContext(): DetectionResult;
|
|
|
42
43
|
* Injected into the Pi session at startup.
|
|
43
44
|
*/
|
|
44
45
|
export declare function generateGreeting(result: DetectionResult): string;
|
|
46
|
+
export default function (pi: ExtensionAPI): void;
|
|
45
47
|
/**
|
|
46
48
|
* Called by Pi on_startup and on_directory_change.
|
|
47
49
|
* Returns the context injection for the active session.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semester-detector.d.ts","sourceRoot":"","sources":["../../src/extensions/semester-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"semester-detector.d.ts","sourceRoot":"","sources":["../../src/extensions/semester-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAOpE,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,UAAU,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAuED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI,eAAe,CAsBvD;AAID;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAiChE;AAyDD,MAAM,CAAC,OAAO,WAAW,EAAE,EAAE,YAAY,QAgCxC;AAID;;;GAGG;AACH,wBAAgB,GAAG,IAAI;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAuB1D"}
|
|
@@ -44,6 +44,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
44
44
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
45
|
exports.detectSemesterContext = detectSemesterContext;
|
|
46
46
|
exports.generateGreeting = generateGreeting;
|
|
47
|
+
exports.default = default_1;
|
|
47
48
|
exports.run = run;
|
|
48
49
|
const fs = __importStar(require("fs"));
|
|
49
50
|
const path = __importStar(require("path"));
|
|
@@ -167,6 +168,81 @@ function generateGreeting(result) {
|
|
|
167
168
|
.filter((l) => l !== undefined)
|
|
168
169
|
.join("\n");
|
|
169
170
|
}
|
|
171
|
+
// ─── System Prompt Context Block ───────────────────────────────────────────
|
|
172
|
+
function semesterContextBlock(ctx) {
|
|
173
|
+
return [
|
|
174
|
+
`[pi-cs] Semester: ${ctx.semester} ${ctx.year}`,
|
|
175
|
+
ctx.week != null ? `[pi-cs] Week: ${ctx.week}` : "",
|
|
176
|
+
ctx.year_of_study != null ? `[pi-cs] Year of study: ${ctx.year_of_study}` : "",
|
|
177
|
+
ctx.courses.length
|
|
178
|
+
? `[pi-cs] Courses: ${ctx.courses.map((c) => `${c.code} (${c.name})`).join(", ")}`
|
|
179
|
+
: "",
|
|
180
|
+
ctx.active_project ? `[pi-cs] Active project: ${ctx.active_project}` : "",
|
|
181
|
+
]
|
|
182
|
+
.filter(Boolean)
|
|
183
|
+
.join("\n");
|
|
184
|
+
}
|
|
185
|
+
// ─── Persona ───────────────────────────────────────────────────────────────
|
|
186
|
+
const APPEND_SYSTEM_PATH = path.join(os.homedir(), ".pi", "agent", "APPEND_SYSTEM.md");
|
|
187
|
+
function loadPersona() {
|
|
188
|
+
const candidates = [
|
|
189
|
+
path.resolve(__dirname, "../../SYSTEM.md"),
|
|
190
|
+
path.resolve(__dirname, "../../../SYSTEM.md"),
|
|
191
|
+
];
|
|
192
|
+
for (const p of candidates) {
|
|
193
|
+
try {
|
|
194
|
+
const content = fs.readFileSync(p, "utf-8");
|
|
195
|
+
if (content.trim())
|
|
196
|
+
return content.trim();
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return "";
|
|
203
|
+
}
|
|
204
|
+
const PERSONA = loadPersona();
|
|
205
|
+
function ensurePersonaInstalled() {
|
|
206
|
+
if (!PERSONA)
|
|
207
|
+
return "noop";
|
|
208
|
+
try {
|
|
209
|
+
const existing = fs.existsSync(APPEND_SYSTEM_PATH)
|
|
210
|
+
? fs.readFileSync(APPEND_SYSTEM_PATH, "utf-8").trim()
|
|
211
|
+
: "";
|
|
212
|
+
if (existing === PERSONA)
|
|
213
|
+
return "noop";
|
|
214
|
+
fs.mkdirSync(path.dirname(APPEND_SYSTEM_PATH), { recursive: true });
|
|
215
|
+
fs.writeFileSync(APPEND_SYSTEM_PATH, PERSONA, "utf-8");
|
|
216
|
+
return existing === "" ? "installed" : "updated";
|
|
217
|
+
}
|
|
218
|
+
catch {
|
|
219
|
+
return "noop";
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
// ─── Pi Extension Factory ──────────────────────────────────────────────────
|
|
223
|
+
function default_1(pi) {
|
|
224
|
+
let semesterCtx = null;
|
|
225
|
+
pi.on("session_start", async (_event, ctx) => {
|
|
226
|
+
const personaStatus = ensurePersonaInstalled();
|
|
227
|
+
if (personaStatus === "installed" || personaStatus === "updated") {
|
|
228
|
+
ctx.ui.notify(`🐠 Pisces persona ${personaStatus} — restart Pi for it to take effect.`, "info");
|
|
229
|
+
}
|
|
230
|
+
const result = detectSemesterContext();
|
|
231
|
+
if (result.found && result.context) {
|
|
232
|
+
semesterCtx = result.context;
|
|
233
|
+
const { semester, year, week } = result.context;
|
|
234
|
+
ctx.ui.notify(`🐠 Pisces loaded — ${semester} ${year}${week ? `, Week ${week}` : ""}`, "info");
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
ctx.ui.notify("🐠 Pisces loaded — no SEMESTER.md found. Create one to enable context awareness.", "info");
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
pi.on("before_agent_start", async (event) => {
|
|
241
|
+
if (!semesterCtx)
|
|
242
|
+
return;
|
|
243
|
+
return { systemPrompt: `${event.systemPrompt}\n\n${semesterContextBlock(semesterCtx)}` };
|
|
244
|
+
});
|
|
245
|
+
}
|
|
170
246
|
// ─── Pi Extension Entry Point ──────────────────────────────────────────────
|
|
171
247
|
/**
|
|
172
248
|
* Called by Pi on_startup and on_directory_change.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"semester-detector.js","sourceRoot":"","sources":["../../src/extensions/semester-detector.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"semester-detector.js","sourceRoot":"","sources":["../../src/extensions/semester-detector.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/pi-cs.meta.json
CHANGED
package/pi-package.yaml
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
name: pi-cs
|
|
2
|
-
version: 0.1.
|
|
2
|
+
version: 0.1.4
|
|
3
3
|
display_name: "pi-cs (Pisces)"
|
|
4
4
|
description: "The CS Student Edition for Pi — Your personal AI teaching assistant for Computer Science, from homework to thesis."
|
|
5
5
|
icon: public/pisces-logo-512.png
|
|
@@ -8,7 +8,7 @@ license: MIT
|
|
|
8
8
|
pi_version: ">=1.0.0"
|
|
9
9
|
|
|
10
10
|
# Core system prompt that defines the academic persona
|
|
11
|
-
system:
|
|
11
|
+
system: SYSTEM.md
|
|
12
12
|
|
|
13
13
|
# Skills (slash commands) registered by this package
|
|
14
14
|
skills:
|
package/extensions/index.d.ts
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* extensions/index.ts
|
|
3
|
-
*
|
|
4
|
-
* pi-cs (Pisces) — Pi Extension Entry Point
|
|
5
|
-
*
|
|
6
|
-
* Exports a default factory function that Pi loads via jiti.
|
|
7
|
-
* Wires up semester context detection, academic integrity guard,
|
|
8
|
-
* skill usage tracking, and burnout nudges.
|
|
9
|
-
*/
|
|
10
|
-
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
11
|
-
export default function (pi: ExtensionAPI): void;
|
|
12
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAuHpE,MAAM,CAAC,OAAO,WAAW,EAAE,EAAE,YAAY,QA6FxC"}
|
package/extensions/index.js
DELETED
|
@@ -1,227 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* extensions/index.ts
|
|
4
|
-
*
|
|
5
|
-
* pi-cs (Pisces) — Pi Extension Entry Point
|
|
6
|
-
*
|
|
7
|
-
* Exports a default factory function that Pi loads via jiti.
|
|
8
|
-
* Wires up semester context detection, academic integrity guard,
|
|
9
|
-
* skill usage tracking, and burnout nudges.
|
|
10
|
-
*/
|
|
11
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
-
if (k2 === undefined) k2 = k;
|
|
13
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
-
}
|
|
17
|
-
Object.defineProperty(o, k2, desc);
|
|
18
|
-
}) : (function(o, m, k, k2) {
|
|
19
|
-
if (k2 === undefined) k2 = k;
|
|
20
|
-
o[k2] = m[k];
|
|
21
|
-
}));
|
|
22
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
23
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
24
|
-
}) : function(o, v) {
|
|
25
|
-
o["default"] = v;
|
|
26
|
-
});
|
|
27
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
28
|
-
var ownKeys = function(o) {
|
|
29
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
30
|
-
var ar = [];
|
|
31
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
32
|
-
return ar;
|
|
33
|
-
};
|
|
34
|
-
return ownKeys(o);
|
|
35
|
-
};
|
|
36
|
-
return function (mod) {
|
|
37
|
-
if (mod && mod.__esModule) return mod;
|
|
38
|
-
var result = {};
|
|
39
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
40
|
-
__setModuleDefault(result, mod);
|
|
41
|
-
return result;
|
|
42
|
-
};
|
|
43
|
-
})();
|
|
44
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
-
exports.default = default_1;
|
|
46
|
-
const fs = __importStar(require("node:fs"));
|
|
47
|
-
const path = __importStar(require("node:path"));
|
|
48
|
-
const os = __importStar(require("node:os"));
|
|
49
|
-
function findSemesterMd() {
|
|
50
|
-
const searchPaths = [
|
|
51
|
-
process.cwd(),
|
|
52
|
-
path.join(os.homedir(), "university"),
|
|
53
|
-
path.join(os.homedir(), "uni"),
|
|
54
|
-
path.join(os.homedir(), "college"),
|
|
55
|
-
path.join(os.homedir(), "Documents", "university"),
|
|
56
|
-
];
|
|
57
|
-
for (const dir of searchPaths) {
|
|
58
|
-
try {
|
|
59
|
-
const candidate = path.join(dir, "SEMESTER.md");
|
|
60
|
-
if (fs.existsSync(candidate))
|
|
61
|
-
return candidate;
|
|
62
|
-
}
|
|
63
|
-
catch {
|
|
64
|
-
continue;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
return null;
|
|
68
|
-
}
|
|
69
|
-
function parseSemesterMd(content) {
|
|
70
|
-
const ctx = {
|
|
71
|
-
semester: "Unknown",
|
|
72
|
-
year: new Date().getFullYear(),
|
|
73
|
-
courses: [],
|
|
74
|
-
};
|
|
75
|
-
for (const line of content.split("\n")) {
|
|
76
|
-
const t = line.trim();
|
|
77
|
-
const sem = t.match(/^semester[:\s]+(.+)/i);
|
|
78
|
-
if (sem)
|
|
79
|
-
ctx.semester = sem[1].trim();
|
|
80
|
-
const yr = t.match(/^year[:\s]+(\d{4})/i);
|
|
81
|
-
if (yr)
|
|
82
|
-
ctx.year = parseInt(yr[1]);
|
|
83
|
-
const wk = t.match(/^week[:\s]+(\d+)/i);
|
|
84
|
-
if (wk)
|
|
85
|
-
ctx.week = parseInt(wk[1]);
|
|
86
|
-
const sy = t.match(/^year.of.study[:\s]+(\d)/i);
|
|
87
|
-
if (sy)
|
|
88
|
-
ctx.year_of_study = parseInt(sy[1]);
|
|
89
|
-
const course = t.match(/^[-*]\s+([A-Z]{2,4}\d{2,4})[:\s]+(.+)/);
|
|
90
|
-
if (course)
|
|
91
|
-
ctx.courses.push({ code: course[1], name: course[2].trim() });
|
|
92
|
-
const proj = t.match(/^active.project[:\s]+(.+)/i);
|
|
93
|
-
if (proj)
|
|
94
|
-
ctx.active_project = proj[1].trim();
|
|
95
|
-
}
|
|
96
|
-
return ctx;
|
|
97
|
-
}
|
|
98
|
-
function semesterContextBlock(ctx) {
|
|
99
|
-
return [
|
|
100
|
-
`[pi-cs] Semester: ${ctx.semester} ${ctx.year}`,
|
|
101
|
-
ctx.week != null ? `[pi-cs] Week: ${ctx.week}` : "",
|
|
102
|
-
ctx.year_of_study != null ? `[pi-cs] Year of study: ${ctx.year_of_study}` : "",
|
|
103
|
-
ctx.courses.length
|
|
104
|
-
? `[pi-cs] Courses: ${ctx.courses.map((c) => `${c.code} (${c.name})`).join(", ")}`
|
|
105
|
-
: "",
|
|
106
|
-
ctx.active_project ? `[pi-cs] Active project: ${ctx.active_project}` : "",
|
|
107
|
-
]
|
|
108
|
-
.filter(Boolean)
|
|
109
|
-
.join("\n");
|
|
110
|
-
}
|
|
111
|
-
// ─── Academic Integrity Guard ──────────────────────────────────────────────
|
|
112
|
-
const HIGH_RISK_PATTERNS = [
|
|
113
|
-
/write.*(my|the)\s+(entire|whole|complete|full)\s+(assignment|homework|lab|project)/i,
|
|
114
|
-
/do\s+my\s+(homework|assignment|lab|project)/i,
|
|
115
|
-
/complete\s+(my|the)\s+(assignment|homework|lab|task)/i,
|
|
116
|
-
/finish\s+my\s+(assignment|homework|lab)\s+for\s+me/i,
|
|
117
|
-
];
|
|
118
|
-
const SAFE_OVERRIDE_PATTERNS = [
|
|
119
|
-
/\bpractic/i,
|
|
120
|
-
/\blearn\b/i,
|
|
121
|
-
/\bunderstand\b/i,
|
|
122
|
-
/\bjust\s+curious\b/i,
|
|
123
|
-
/\bnot\s+for\s+grade/i,
|
|
124
|
-
/\bpersonal\s+project\b/i,
|
|
125
|
-
/\bleetcode\b/i,
|
|
126
|
-
];
|
|
127
|
-
function integrityWarning(text) {
|
|
128
|
-
if (SAFE_OVERRIDE_PATTERNS.some((p) => p.test(text)))
|
|
129
|
-
return null;
|
|
130
|
-
if (HIGH_RISK_PATTERNS.some((p) => p.test(text))) {
|
|
131
|
-
return [
|
|
132
|
-
"⚠️ **Academic Integrity Notice**",
|
|
133
|
-
"",
|
|
134
|
-
"It sounds like you want me to complete a graded assignment. I won't do that — it would hurt your learning and could get you in serious trouble.",
|
|
135
|
-
"",
|
|
136
|
-
"Here's what I *can* do:",
|
|
137
|
-
"- Break down the problem and explain the concepts",
|
|
138
|
-
"- Give hints and guided pseudocode",
|
|
139
|
-
"- Help you debug your own code",
|
|
140
|
-
"- Explain similar example problems",
|
|
141
|
-
"",
|
|
142
|
-
"Tell me where you're actually stuck and we'll work through it together. 🐠",
|
|
143
|
-
].join("\n");
|
|
144
|
-
}
|
|
145
|
-
return null;
|
|
146
|
-
}
|
|
147
|
-
// ─── Pi Extension Factory ──────────────────────────────────────────────────
|
|
148
|
-
function default_1(pi) {
|
|
149
|
-
let semesterCtx = null;
|
|
150
|
-
const sessionStart = Date.now();
|
|
151
|
-
const skillsUsed = [];
|
|
152
|
-
// ── Load semester context at startup ─────────────────────────────────
|
|
153
|
-
pi.on("session_start", async (_event, ctx) => {
|
|
154
|
-
const semFile = findSemesterMd();
|
|
155
|
-
if (semFile) {
|
|
156
|
-
try {
|
|
157
|
-
const content = fs.readFileSync(semFile, "utf-8");
|
|
158
|
-
semesterCtx = parseSemesterMd(content);
|
|
159
|
-
ctx.ui.notify(`🐠 Pisces loaded — ${semesterCtx.semester} ${semesterCtx.year}${semesterCtx.week ? `, Week ${semesterCtx.week}` : ""}`, "info");
|
|
160
|
-
}
|
|
161
|
-
catch {
|
|
162
|
-
ctx.ui.notify("🐠 Pisces loaded", "info");
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
else {
|
|
166
|
-
ctx.ui.notify("🐠 Pisces loaded — no SEMESTER.md found. Create one to enable context awareness.", "info");
|
|
167
|
-
}
|
|
168
|
-
});
|
|
169
|
-
// ── Inject semester context into system prompt each turn ─────────────
|
|
170
|
-
pi.on("before_agent_start", async (event) => {
|
|
171
|
-
if (!semesterCtx)
|
|
172
|
-
return;
|
|
173
|
-
const contextBlock = semesterContextBlock(semesterCtx);
|
|
174
|
-
const appendedSystemPrompt = `${event.systemPrompt}\n\n${contextBlock}`;
|
|
175
|
-
return { systemPrompt: appendedSystemPrompt };
|
|
176
|
-
});
|
|
177
|
-
// ── Academic integrity guard on every input ───────────────────────────
|
|
178
|
-
pi.on("input", async (event) => {
|
|
179
|
-
const warning = integrityWarning(event.text);
|
|
180
|
-
if (warning) {
|
|
181
|
-
pi.sendUserMessage(warning);
|
|
182
|
-
return { action: "handled" };
|
|
183
|
-
}
|
|
184
|
-
return { action: "continue" };
|
|
185
|
-
});
|
|
186
|
-
// ── Track which skills are used this session ──────────────────────────
|
|
187
|
-
pi.on("input", async (event) => {
|
|
188
|
-
const match = event.text.match(/^\/skill:(\w+)/);
|
|
189
|
-
if (match && !skillsUsed.includes(match[1])) {
|
|
190
|
-
skillsUsed.push(match[1]);
|
|
191
|
-
}
|
|
192
|
-
return { action: "continue" };
|
|
193
|
-
});
|
|
194
|
-
// ── Burnout nudge at 3-hour mark ──────────────────────────────────────
|
|
195
|
-
pi.on("before_agent_start", async (_event, ctx) => {
|
|
196
|
-
const elapsed = Math.round((Date.now() - sessionStart) / 60000);
|
|
197
|
-
if (elapsed > 0 && elapsed % 180 === 0) {
|
|
198
|
-
ctx.ui.notify(`🐠 You've been at this for ${elapsed} minutes. Take a short break — your brain consolidates learning during rest, not during grinding.`, "info");
|
|
199
|
-
}
|
|
200
|
-
});
|
|
201
|
-
// ── /pisces command: show session status ──────────────────────────────
|
|
202
|
-
pi.registerCommand("pisces", {
|
|
203
|
-
description: "Show Pisces status — semester context, skills used, session duration",
|
|
204
|
-
handler: async (_args, ctx) => {
|
|
205
|
-
const elapsed = Math.round((Date.now() - sessionStart) / 60000);
|
|
206
|
-
const lines = [
|
|
207
|
-
"🐠 **Pisces Status**",
|
|
208
|
-
"",
|
|
209
|
-
semesterCtx
|
|
210
|
-
? `📅 ${semesterCtx.semester} ${semesterCtx.year}${semesterCtx.week ? ` — Week ${semesterCtx.week}` : ""}`
|
|
211
|
-
: "📅 No SEMESTER.md loaded",
|
|
212
|
-
semesterCtx?.courses.length
|
|
213
|
-
? `📚 Courses: ${semesterCtx.courses.map((c) => c.code).join(", ")}`
|
|
214
|
-
: "",
|
|
215
|
-
semesterCtx?.active_project ? `🔧 Project: ${semesterCtx.active_project}` : "",
|
|
216
|
-
`⏱ Session: ${elapsed} minute${elapsed !== 1 ? "s" : ""}`,
|
|
217
|
-
skillsUsed.length
|
|
218
|
-
? `🛠 Skills used this session: ${skillsUsed.map((s) => `/skill:${s}`).join(", ")}`
|
|
219
|
-
: "🛠 No skills used yet — try /skill:explain, /skill:homework, or /skill:leetcode",
|
|
220
|
-
]
|
|
221
|
-
.filter(Boolean)
|
|
222
|
-
.join("\n");
|
|
223
|
-
ctx.ui.notify(lines, "info");
|
|
224
|
-
},
|
|
225
|
-
});
|
|
226
|
-
}
|
|
227
|
-
//# sourceMappingURL=index.js.map
|
package/extensions/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":"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"}
|
/package/{system.md → SYSTEM.md}
RENAMED
|
File without changes
|