@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 checklist
204
+ ### Release process
205
205
 
206
- 1. Test new pi version locally
207
- 2. Test extensions work
208
- 3. Bump version in `package.json`
209
- 4. Push to main
210
- 5. `npm publish`
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);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clubnet/seedclub",
3
- "version": "0.2.7",
3
+ "version": "0.2.8",
4
4
  "description": "The Human+ Venture Network — AI agent for deal sourcing, research, and signal tracking",
5
5
  "license": "MIT",
6
6
  "repository": {