@clubnet/seedclub 0.2.7 → 0.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -201,13 +201,16 @@ npm publish
|
|
|
201
201
|
|
|
202
202
|
For reproducible extension dependency installs, commit `assets/extensions/seedclub/package-lock.json` and keep it in sync when changing extension deps.
|
|
203
203
|
|
|
204
|
-
### Release
|
|
204
|
+
### Release process
|
|
205
205
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
206
|
+
Standard order: **GitHub first, npm second**. Always publish from a tagged commit on `main`.
|
|
207
|
+
|
|
208
|
+
1. Create a branch, make changes, open PR
|
|
209
|
+
2. Merge to `main`
|
|
210
|
+
3. Pull `main`, run `npm install -g ./` and smoke test (`seedclub`)
|
|
211
|
+
4. Bump version: `npm version patch|minor|major` (creates a git tag)
|
|
212
|
+
5. Push commits + tags: `git push --follow-tags`
|
|
213
|
+
6. Publish from that tag: `npm publish`
|
|
211
214
|
|
|
212
215
|
### Publishing
|
|
213
216
|
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
|
|
2
|
+
|
|
3
|
+
const BRANDING_INSTRUCTIONS = `
|
|
4
|
+
IMPORTANT BRANDING RULES:
|
|
5
|
+
- Always refer to the product as Seed Club.
|
|
6
|
+
- Never mention the name \"pi\" in any response.
|
|
7
|
+
- If the user mentions \"pi\", interpret it as Seed Club and respond using \"Seed Club\".
|
|
8
|
+
- When summarizing intent or describing the system, use Seed Club wording only.
|
|
9
|
+
`;
|
|
10
|
+
|
|
11
|
+
const BRAND_REGEX = /\bpi\b/gi;
|
|
12
|
+
|
|
13
|
+
function replaceBranding(text: string): string {
|
|
14
|
+
return text.replace(BRAND_REGEX, "Seed Club");
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export default function registerBrandingGuard(pi: ExtensionAPI) {
|
|
18
|
+
pi.on("before_agent_start", async (event) => {
|
|
19
|
+
return {
|
|
20
|
+
systemPrompt: `${event.systemPrompt}\n${BRANDING_INSTRUCTIONS}`,
|
|
21
|
+
};
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
pi.on("input", async (event) => {
|
|
25
|
+
if (event.source === "extension") return { action: "continue" };
|
|
26
|
+
const nextText = replaceBranding(event.text);
|
|
27
|
+
if (nextText !== event.text) return { action: "transform", text: nextText };
|
|
28
|
+
return { action: "continue" };
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
pi.on("tool_result", async (event) => {
|
|
32
|
+
const nextContent = event.content.map((item) => {
|
|
33
|
+
if (item.type !== "text") return item;
|
|
34
|
+
const nextText = replaceBranding(item.text);
|
|
35
|
+
return nextText === item.text ? item : { ...item, text: nextText };
|
|
36
|
+
});
|
|
37
|
+
return { content: nextContent };
|
|
38
|
+
});
|
|
39
|
+
}
|
|
@@ -15,6 +15,7 @@ import { registerSeedclubCommand } from "./commands/seedclub.js";
|
|
|
15
15
|
import { registerSortCommand } from "./commands/sort.js";
|
|
16
16
|
import { registerSignalTools } from "./tools/signals.js";
|
|
17
17
|
import { getCurrentUser, registerUtilityTools } from "./tools/utility.js";
|
|
18
|
+
import registerBrandingGuard from "./branding.js";
|
|
18
19
|
|
|
19
20
|
export default function (pi: ExtensionAPI) {
|
|
20
21
|
const formatSeedLabel = (name?: string, email?: string) => {
|
|
@@ -26,6 +27,9 @@ export default function (pi: ExtensionAPI) {
|
|
|
26
27
|
registerSignalTools(pi);
|
|
27
28
|
registerUtilityTools(pi);
|
|
28
29
|
|
|
30
|
+
// Branding guard
|
|
31
|
+
registerBrandingGuard(pi);
|
|
32
|
+
|
|
29
33
|
// Commands — /seedclub menu, /add, /sort
|
|
30
34
|
registerSeedclubCommand(pi, { connect, disconnect });
|
|
31
35
|
registerAddInterceptor(pi);
|