@aethrekh/pi-cs 0.1.6 → 0.1.8-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/extensions/integrity-guard.js +12 -2
- package/package.json +4 -1
- package/pi-cs.meta.json +2 -2
- package/pi-package.yaml +1 -1
- package/postinstall.d.ts +9 -0
- package/postinstall.js +66 -0
- package/postinstall.js.map +1 -0
|
@@ -101,12 +101,22 @@ Just let me know!`;
|
|
|
101
101
|
}
|
|
102
102
|
// ─── Pi Extension Factory ──────────────────────────────────────────────────
|
|
103
103
|
function default_1(pi) {
|
|
104
|
+
// Guard against sendUserMessage re-triggering this handler — warning text
|
|
105
|
+
// contains words like "graded" that would otherwise match medium-risk patterns.
|
|
106
|
+
let handlingWarning = false;
|
|
104
107
|
pi.on("input", async (event) => {
|
|
105
|
-
|
|
108
|
+
if (handlingWarning)
|
|
109
|
+
return { action: "continue" };
|
|
110
|
+
const skillMatch = event.text.match(/^\/skill:(\w+)\s*/);
|
|
106
111
|
const skillName = skillMatch?.[1] ?? "";
|
|
107
|
-
|
|
112
|
+
// Strip /skill:name prefix so it doesn't trigger keyword patterns
|
|
113
|
+
// e.g. "/skill:homework explain X" should not match \bhomework\b
|
|
114
|
+
const userRequest = skillMatch ? event.text.slice(skillMatch[0].length) : event.text;
|
|
115
|
+
const result = checkIntegrityRisk(userRequest, skillName);
|
|
108
116
|
if (result.warning) {
|
|
117
|
+
handlingWarning = true;
|
|
109
118
|
pi.sendUserMessage(result.warning);
|
|
119
|
+
handlingWarning = false;
|
|
110
120
|
return result.risk === "high"
|
|
111
121
|
? { action: "handled" }
|
|
112
122
|
: { action: "continue" };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aethrekh/pi-cs",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.8-alpha.0",
|
|
4
4
|
"description": "Pisces — The CS Student Edition for Pi Coding Agent. Your personal AI teaching assistant from homework to thesis.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"academic",
|
|
@@ -40,5 +40,8 @@
|
|
|
40
40
|
"skills": [
|
|
41
41
|
"./skills"
|
|
42
42
|
]
|
|
43
|
+
},
|
|
44
|
+
"scripts": {
|
|
45
|
+
"postinstall": "node postinstall.js"
|
|
43
46
|
}
|
|
44
47
|
}
|
package/pi-cs.meta.json
CHANGED
package/pi-package.yaml
CHANGED
package/postinstall.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* postinstall.ts
|
|
3
|
+
*
|
|
4
|
+
* Runs automatically after `pi install npm:@aethrekh/pi-cs`.
|
|
5
|
+
* Writes SYSTEM.md to ~/.pi/agent/APPEND_SYSTEM.md so the Pisces persona
|
|
6
|
+
* is active from the very first Pi session — no restart required.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=postinstall.d.ts.map
|
package/postinstall.js
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* postinstall.ts
|
|
4
|
+
*
|
|
5
|
+
* Runs automatically after `pi install npm:@aethrekh/pi-cs`.
|
|
6
|
+
* Writes SYSTEM.md to ~/.pi/agent/APPEND_SYSTEM.md so the Pisces persona
|
|
7
|
+
* is active from the very first Pi session — no restart required.
|
|
8
|
+
*/
|
|
9
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
12
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
13
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
14
|
+
}
|
|
15
|
+
Object.defineProperty(o, k2, desc);
|
|
16
|
+
}) : (function(o, m, k, k2) {
|
|
17
|
+
if (k2 === undefined) k2 = k;
|
|
18
|
+
o[k2] = m[k];
|
|
19
|
+
}));
|
|
20
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
21
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
22
|
+
}) : function(o, v) {
|
|
23
|
+
o["default"] = v;
|
|
24
|
+
});
|
|
25
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
26
|
+
var ownKeys = function(o) {
|
|
27
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
28
|
+
var ar = [];
|
|
29
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
30
|
+
return ar;
|
|
31
|
+
};
|
|
32
|
+
return ownKeys(o);
|
|
33
|
+
};
|
|
34
|
+
return function (mod) {
|
|
35
|
+
if (mod && mod.__esModule) return mod;
|
|
36
|
+
var result = {};
|
|
37
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
38
|
+
__setModuleDefault(result, mod);
|
|
39
|
+
return result;
|
|
40
|
+
};
|
|
41
|
+
})();
|
|
42
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
43
|
+
const fs = __importStar(require("fs"));
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const os = __importStar(require("os"));
|
|
46
|
+
const systemMdPath = path.join(__dirname, "SYSTEM.md");
|
|
47
|
+
const appendPath = path.join(os.homedir(), ".pi", "agent", "APPEND_SYSTEM.md");
|
|
48
|
+
try {
|
|
49
|
+
if (!fs.existsSync(systemMdPath))
|
|
50
|
+
process.exit(0);
|
|
51
|
+
const content = fs.readFileSync(systemMdPath, "utf-8").trim();
|
|
52
|
+
if (!content)
|
|
53
|
+
process.exit(0);
|
|
54
|
+
fs.mkdirSync(path.dirname(appendPath), { recursive: true });
|
|
55
|
+
const existing = fs.existsSync(appendPath)
|
|
56
|
+
? fs.readFileSync(appendPath, "utf-8").trim()
|
|
57
|
+
: "";
|
|
58
|
+
if (existing !== content) {
|
|
59
|
+
fs.writeFileSync(appendPath, content, "utf-8");
|
|
60
|
+
console.log("🐠 Pisces persona installed → ~/.pi/agent/APPEND_SYSTEM.md");
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// Never fail install
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=postinstall.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postinstall.js","sourceRoot":"","sources":["../src/postinstall.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAEzB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AACvD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,CAAC,CAAC;AAE/E,IAAI,CAAC;IACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9D,IAAI,CAAC,OAAO;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAE9B,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QACxC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE;QAC7C,CAAC,CAAC,EAAE,CAAC;IACP,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC;AAAC,MAAM,CAAC;IACP,qBAAqB;AACvB,CAAC"}
|