bkper 5.1.0 → 5.3.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.
Files changed (54) hide show
  1. package/README.md +16 -0
  2. package/lib/agent/extensions/bkper-ai-provider.d.ts.map +1 -1
  3. package/lib/agent/extensions/bkper-ai-provider.js +46 -17
  4. package/lib/agent/extensions/bkper-ai-provider.js.map +1 -1
  5. package/lib/agent/extensions/builtins.d.ts +2 -2
  6. package/lib/agent/extensions/builtins.d.ts.map +1 -1
  7. package/lib/agent/extensions/builtins.js +10 -2
  8. package/lib/agent/extensions/builtins.js.map +1 -1
  9. package/lib/agent/extensions/core-concepts-preload.d.ts +16 -4
  10. package/lib/agent/extensions/core-concepts-preload.d.ts.map +1 -1
  11. package/lib/agent/extensions/core-concepts-preload.js +77 -47
  12. package/lib/agent/extensions/core-concepts-preload.js.map +1 -1
  13. package/lib/agent/extensions/startup-logo.d.ts +12 -0
  14. package/lib/agent/extensions/startup-logo.d.ts.map +1 -0
  15. package/lib/agent/extensions/startup-logo.js +101 -0
  16. package/lib/agent/extensions/startup-logo.js.map +1 -0
  17. package/lib/agent/extensions/startup.d.ts +2 -2
  18. package/lib/agent/extensions/startup.d.ts.map +1 -1
  19. package/lib/agent/extensions/startup.js +82 -35
  20. package/lib/agent/extensions/startup.js.map +1 -1
  21. package/lib/agent/interactive/logo-3d.d.ts +125 -0
  22. package/lib/agent/interactive/logo-3d.d.ts.map +1 -0
  23. package/lib/agent/interactive/logo-3d.js +1187 -0
  24. package/lib/agent/interactive/logo-3d.js.map +1 -0
  25. package/lib/agent/interactive/prompt-history-store.d.ts +1 -0
  26. package/lib/agent/interactive/prompt-history-store.d.ts.map +1 -1
  27. package/lib/agent/interactive/prompt-history-store.js +19 -5
  28. package/lib/agent/interactive/prompt-history-store.js.map +1 -1
  29. package/lib/agent/interactive/run-agent-mode.d.ts.map +1 -1
  30. package/lib/agent/interactive/run-agent-mode.js +5 -2
  31. package/lib/agent/interactive/run-agent-mode.js.map +1 -1
  32. package/lib/agent/interactive/settings.d.ts +26 -4
  33. package/lib/agent/interactive/settings.d.ts.map +1 -1
  34. package/lib/agent/interactive/settings.js +106 -16
  35. package/lib/agent/interactive/settings.js.map +1 -1
  36. package/lib/agent/interactive/themes.d.ts +13 -0
  37. package/lib/agent/interactive/themes.d.ts.map +1 -0
  38. package/lib/agent/interactive/themes.js +36 -0
  39. package/lib/agent/interactive/themes.js.map +1 -0
  40. package/lib/agent/system-prompt.d.ts.map +1 -1
  41. package/lib/agent/system-prompt.js +42 -8
  42. package/lib/agent/system-prompt.js.map +1 -1
  43. package/lib/agent/themes/bkper-dark.json +80 -0
  44. package/lib/agent/themes/bkper-light.json +80 -0
  45. package/lib/cli.js +1 -1
  46. package/lib/cli.js.map +1 -1
  47. package/lib/commands/agent-command.d.ts.map +1 -1
  48. package/lib/commands/agent-command.js +2 -1
  49. package/lib/commands/agent-command.js.map +1 -1
  50. package/lib/docs/ai/decision-models.md +316 -0
  51. package/lib/docs/apps/ai.md +120 -88
  52. package/lib/docs/apps/overview.md +1 -1
  53. package/lib/docs/index.md +2 -1
  54. package/package.json +7 -5
package/README.md CHANGED
@@ -199,6 +199,22 @@ Use `/handoff <goal>` to continue long-running work in a new focused session. If
199
199
 
200
200
  Press `Ctrl+R` in the standard or handoff input to search recently submitted inputs by case-insensitive substring, newest first. Search history starts with inputs submitted after this feature is installed; it does not scan existing sessions. The handoff search omits Bash commands. Press `Ctrl+Alt+R` to open the session tree.
201
201
 
202
+ ### Connect MCP servers
203
+
204
+ The agent can use tools from [MCP](https://modelcontextprotocol.io) servers you add, such as file storage, email, or other services. No servers are added by default. You can also ask the agent to add one for you.
205
+
206
+ ```bash
207
+ bkper agent mcp add docs --url https://example.com/mcp # remote server
208
+ bkper agent mcp add files -- npx -y @modelcontextprotocol/server-filesystem . # local server
209
+ bkper agent mcp list # check connections and tools
210
+ bkper agent mcp login docs # sign in, for servers that use OAuth
211
+ bkper agent mcp remove docs
212
+ ```
213
+
214
+ Run `/reload` in an open session after adding or removing a server, and use `/mcp` to see connections, sign in, or turn a server off. Servers are stored in `~/.pi/agent/mcp.json`, shared with Pi; a project's `.pi/mcp.json` is read only after you trust the project. `bkper agent mcp --help` lists all options; it names the commands `pi mcp ...`, which you run as `bkper agent mcp ...`.
215
+
216
+ MCP tools run with your permissions. Add only servers you trust.
217
+
202
218
  ---
203
219
 
204
220
  ## Data Management
@@ -1 +1 @@
1
- {"version":3,"file":"bkper-ai-provider.d.ts","sourceRoot":"","sources":["../../../src/agent/extensions/bkper-ai-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,YAAY,EACZ,cAAc,EAEjB,MAAM,iCAAiC,CAAC;AAEzC,eAAO,MAAM,oBAAoB,UAAU,CAAC;AAC5C,eAAO,MAAM,4BAA4B,4BAA4B,CAAC;AAItE,QAAA,MAAM,eAAe,sEAAuE,CAAC;AAE7F,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpE,MAAM,WAAW,oBAAoB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,yBAAyB,CAAC,EAAE,oBAAoB,CAAC;CACpD;AAmCD,wBAAgB,yBAAyB,CACrC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACtD,MAAM,GAAG,SAAS,CA0BpB;AA4FD,wBAAgB,uBAAuB,CAAC,MAAM,SAAS,oBAAoB,EACvE,MAAM,EAAE,SAAS,MAAM,EAAE,GAC1B,MAAM,GAAG,SAAS,CAMpB;AAED,wBAAgB,8BAA8B,CAC1C,KAAK,EAAE,oBAAoB,GAAG,SAAS,GACxC,oBAAoB,GAAG,SAAS,CAIlC;AAED,wBAAgB,wBAAwB,CACpC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,EACrD,OAAO,GAAE,OAAO,KAAa,GAC9B,cAAc,CAgBhB;AAED,wBAAgB,uBAAuB,CACnC,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,kBAAkB,CAAC,EAC1C,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACtD,IAAI,CAEN"}
1
+ {"version":3,"file":"bkper-ai-provider.d.ts","sourceRoot":"","sources":["../../../src/agent/extensions/bkper-ai-provider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACR,YAAY,EACZ,cAAc,EAEjB,MAAM,iCAAiC,CAAC;AAEzC,eAAO,MAAM,oBAAoB,UAAU,CAAC;AAC5C,eAAO,MAAM,4BAA4B,4BAA4B,CAAC;AAItE,QAAA,MAAM,eAAe,sEAAuE,CAAC;AAG7F,MAAM,MAAM,oBAAoB,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpE,MAAM,WAAW,oBAAoB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,yBAAyB,CAAC,EAAE,oBAAoB,CAAC;CACpD;AAsED,wBAAgB,yBAAyB,CACrC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACtD,MAAM,GAAG,SAAS,CA0BpB;AAqID,wBAAgB,uBAAuB,CAAC,MAAM,SAAS,oBAAoB,EACvE,MAAM,EAAE,SAAS,MAAM,EAAE,GAC1B,MAAM,GAAG,SAAS,CAMpB;AAED,wBAAgB,8BAA8B,CAC1C,KAAK,EAAE,oBAAoB,GAAG,SAAS,GACxC,oBAAoB,GAAG,SAAS,CAIlC;AAED,wBAAgB,wBAAwB,CACpC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,EACrD,OAAO,GAAE,OAAO,KAAa,GAC9B,cAAc,CAkBhB;AAED,wBAAgB,uBAAuB,CACnC,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,kBAAkB,CAAC,EAC1C,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACtD,IAAI,CAEN"}
@@ -7,11 +7,19 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
+ import { typesafeSystemOneApi } from '@earendil-works/pi-ai/api/typesafe-system-one.lazy';
10
11
  export const BKPER_AI_PROVIDER_ID = 'bkper';
11
12
  export const BKPER_AI_PRODUCTION_BASE_URL = 'https://ai.bkper.app/v1';
12
13
  const BKPER_AI_BASE_URL_ENV_VAR = 'BKPER_AI_BASE_URL';
13
14
  const BKPER_AI_DEVELOPMENT_ORIGIN = 'https://ai-dev.bkper.app';
14
15
  const THINKING_LEVELS = ['off', 'minimal', 'low', 'medium', 'high', 'xhigh', 'max'];
16
+ const BKPER_AI_CLASSIFIER_API = 'typesafe-system-one';
17
+ function isDecisionModel(model) {
18
+ return model.type === 'decision';
19
+ }
20
+ function isChatModel(model) {
21
+ return model.type === undefined || model.type === 'language';
22
+ }
15
23
  function invalidBkperAiBaseUrlError() {
16
24
  return new Error(`${BKPER_AI_BASE_URL_ENV_VAR} must be an HTTPS URL on ai-dev.bkper.app ` +
17
25
  'without credentials, a custom port, query parameters, or a fragment.');
@@ -69,29 +77,41 @@ function nanoUsdPerTokenToUsdPerMillion(value) {
69
77
  function toProviderModel(model, defaultModelId) {
70
78
  var _a, _b, _c;
71
79
  const input = (_b = (_a = model.input_modalities) === null || _a === void 0 ? void 0 : _a.filter((modality) => modality === 'text' || modality === 'image')) !== null && _b !== void 0 ? _b : [];
80
+ return Object.assign(Object.assign({ id: model.id, name: (_c = model.display_name) !== null && _c !== void 0 ? _c : model.id, reasoning: model.thinking_levels.some(level => level !== 'none'), thinkingLevelMap: getThinkingLevelMap(model.thinking_levels), input, cost: {
81
+ input: nanoUsdPerTokenToUsdPerMillion(model.pricing.inputNanoUsdPerToken),
82
+ output: nanoUsdPerTokenToUsdPerMillion(model.pricing.outputNanoUsdPerToken),
83
+ cacheRead: nanoUsdPerTokenToUsdPerMillion(model.pricing.cachedInputNanoUsdPerToken),
84
+ cacheWrite: nanoUsdPerTokenToUsdPerMillion(model.pricing.cacheWriteNanoUsdPerToken),
85
+ } }, getPromptCache(model.prompt_cache_ttl_seconds)), { contextWindow: model.context_window, maxTokens: model.max_output_tokens, compat: Object.assign({ supportsDeveloperRole: false, sessionAffinityFormat: 'openai', supportsLongCacheRetention: false }, (model.mid_conversation_system_messages === true
86
+ ? { supportsMidConvoSystemMessages: true }
87
+ : {})), bkperDefault: model.id === defaultModelId, bkperDefaultThinkingLevel: getDefaultThinkingLevel(model) });
88
+ }
89
+ function toClassifierModel(model) {
90
+ var _a;
72
91
  return {
92
+ type: 'classifier',
73
93
  id: model.id,
74
- name: (_c = model.display_name) !== null && _c !== void 0 ? _c : model.id,
75
- reasoning: model.thinking_levels.some(level => level !== 'none'),
76
- thinkingLevelMap: getThinkingLevelMap(model.thinking_levels),
77
- input,
94
+ name: (_a = model.display_name) !== null && _a !== void 0 ? _a : model.id,
95
+ api: BKPER_AI_CLASSIFIER_API,
96
+ input: ['text'],
78
97
  cost: {
79
98
  input: nanoUsdPerTokenToUsdPerMillion(model.pricing.inputNanoUsdPerToken),
80
99
  output: nanoUsdPerTokenToUsdPerMillion(model.pricing.outputNanoUsdPerToken),
81
- cacheRead: nanoUsdPerTokenToUsdPerMillion(model.pricing.cachedInputNanoUsdPerToken),
82
- cacheWrite: nanoUsdPerTokenToUsdPerMillion(model.pricing.cacheWriteNanoUsdPerToken),
100
+ cacheRead: 0,
101
+ cacheWrite: 0,
83
102
  },
84
103
  contextWindow: model.context_window,
85
- maxTokens: model.max_output_tokens,
86
- compat: {
87
- supportsDeveloperRole: false,
88
- sessionAffinityFormat: 'openai',
89
- supportsLongCacheRetention: false,
90
- },
91
- bkperDefault: model.id === defaultModelId,
92
- bkperDefaultThinkingLevel: getDefaultThinkingLevel(model),
93
104
  };
94
105
  }
106
+ /**
107
+ * Maps the catalog's prompt cache lifetime to Pi's cache warming metadata.
108
+ * Models without a valid lifetime stay ineligible for cache warming.
109
+ */
110
+ function getPromptCache(ttlSeconds) {
111
+ return typeof ttlSeconds === 'number' && Number.isFinite(ttlSeconds) && ttlSeconds > 0
112
+ ? { promptCache: { short: ttlSeconds } }
113
+ : {};
114
+ }
95
115
  function fetchBkperAiModels(baseUrl, fetchFn, signal) {
96
116
  return __awaiter(this, void 0, void 0, function* () {
97
117
  var _a, _b, _c;
@@ -103,9 +123,16 @@ function fetchBkperAiModels(baseUrl, fetchFn, signal) {
103
123
  if (!Array.isArray(catalog.data)) {
104
124
  throw new Error('Bkper AI model response is invalid.');
105
125
  }
106
- const models = catalog.data.filter(model => { var _a; return (_a = model.input_modalities) === null || _a === void 0 ? void 0 : _a.includes('image'); });
107
- const defaultModelId = (_b = (_a = models.find(model => model.id === catalog.default_model)) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : (_c = models[0]) === null || _c === void 0 ? void 0 : _c.id;
108
- return models.map(model => toProviderModel(model, defaultModelId));
126
+ // Split by type first: decision entries lack the chat fields toProviderModel reads.
127
+ const classifierModels = catalog.data.filter(isDecisionModel).map(toClassifierModel);
128
+ const chatModels = catalog.data
129
+ .filter(isChatModel)
130
+ .filter(model => { var _a; return (_a = model.input_modalities) === null || _a === void 0 ? void 0 : _a.includes('image'); });
131
+ const defaultModelId = (_b = (_a = chatModels.find(model => model.id === catalog.default_model)) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : (_c = chatModels[0]) === null || _c === void 0 ? void 0 : _c.id;
132
+ return [
133
+ ...chatModels.map(model => toProviderModel(model, defaultModelId)),
134
+ ...classifierModels,
135
+ ];
109
136
  });
110
137
  }
111
138
  export function findDefaultBkperAiModel(models) {
@@ -130,6 +157,8 @@ export function getBkperAiProviderConfig(env = process.env, fetchFn = fetch) {
130
157
  'User-Agent': 'bkper-cli',
131
158
  },
132
159
  api: 'openai-responses',
160
+ classifiers: { [BKPER_AI_CLASSIFIER_API]: typesafeSystemOneApi() },
161
+ // Every model type arrives through refreshModels, so the static list stays empty.
133
162
  models: [],
134
163
  refreshModels: ({ signal }) => fetchBkperAiModels(baseUrl, fetchFn, signal),
135
164
  };
@@ -1 +1 @@
1
- {"version":3,"file":"bkper-ai-provider.js","sourceRoot":"","sources":["../../../src/agent/extensions/bkper-ai-provider.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bkper-ai-provider.js","sourceRoot":"","sources":["../../../src/agent/extensions/bkper-ai-provider.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type ExtensionAPI, type LoadExtensionsResult } from '@earendil-works/pi-coding-agent';
1
+ import { type ExtensionAPI, type LoadExtensionsResult, type QuietStartup } from '@earendil-works/pi-coding-agent';
2
2
  import { runStartupMaintenance } from '../startup-maintenance.js';
3
3
  import { type ProviderCredentialManager } from './auth-commands.js';
4
4
  import { type HandoffCommandDispatcher } from './handoff.js';
@@ -7,7 +7,7 @@ type ExtensionLoadError = {
7
7
  error: string;
8
8
  };
9
9
  type BuiltinsSettings = {
10
- getQuietStartup(): boolean;
10
+ getQuietStartup(): QuietStartup;
11
11
  getShellPath(): string | undefined;
12
12
  };
13
13
  export declare const BKPER_AGENT_BUILTINS_EXTENSION_NAME = "Bkper Agent built-ins";
@@ -1 +1 @@
1
- {"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../../../src/agent/extensions/builtins.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,KAAK,YAAY,EACjB,KAAK,oBAAoB,EAC5B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAC,qBAAqB,EAAC,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAEH,KAAK,yBAAyB,EACjC,MAAM,oBAAoB,CAAC;AAM5B,OAAO,EAGH,KAAK,wBAAwB,EAChC,MAAM,cAAc,CAAC;AAGtB,KAAK,kBAAkB,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACpB,eAAe,IAAI,OAAO,CAAC;IAC3B,YAAY,IAAI,MAAM,GAAG,SAAS,CAAC;CACtC,CAAC;AAKF,eAAO,MAAM,mCAAmC,0BAA0B,CAAC;AAC3E,eAAO,MAAM,mCAAmC,kCAAkC,CAAC;AAGnF,wBAAgB,qCAAqC,CACjD,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACtD,OAAO,CAET;AAuBD,wBAAgB,kCAAkC,CAC9C,MAAM,EAAE,kBAAkB,EAAE,EAC5B,OAAO,EAAE;IAAC,OAAO,EAAE,OAAO,CAAA;CAAC,GAC5B,kBAAkB,EAAE,CAatB;AAED,wBAAgB,6BAA6B,CACzC,IAAI,EAAE,oBAAoB,EAC1B,OAAO,EAAE;IAAC,OAAO,EAAE,OAAO,CAAA;CAAC,GAC5B,oBAAoB,CAMtB;AAED,wBAAgB,0BAA0B,CACtC,EAAE,EAAE,YAAY,EAChB,kBAAkB,GAAE,OAAO,qBAA6C,EACxE,eAAe,CAAC,EAAE,gBAAgB,EAClC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,EACrD,iBAAiB,CAAC,EAAE,yBAAyB,EAC7C,sBAAsB,CAAC,EAAE,wBAAwB,GAClD,IAAI,CAiBN"}
1
+ {"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../../../src/agent/extensions/builtins.ts"],"names":[],"mappings":"AAAA,OAAO,EAMH,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,YAAY,EACpB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAC,qBAAqB,EAAC,MAAM,2BAA2B,CAAC;AAChE,OAAO,EAEH,KAAK,yBAAyB,EACjC,MAAM,oBAAoB,CAAC;AAM5B,OAAO,EAGH,KAAK,wBAAwB,EAChC,MAAM,cAAc,CAAC;AAGtB,KAAK,kBAAkB,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACpB,eAAe,IAAI,YAAY,CAAC;IAChC,YAAY,IAAI,MAAM,GAAG,SAAS,CAAC;CACtC,CAAC;AAKF,eAAO,MAAM,mCAAmC,0BAA0B,CAAC;AAC3E,eAAO,MAAM,mCAAmC,kCAAkC,CAAC;AAGnF,wBAAgB,qCAAqC,CACjD,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACtD,OAAO,CAET;AAyBD,wBAAgB,kCAAkC,CAC9C,MAAM,EAAE,kBAAkB,EAAE,EAC5B,OAAO,EAAE;IAAC,OAAO,EAAE,OAAO,CAAA;CAAC,GAC5B,kBAAkB,EAAE,CAatB;AAED,wBAAgB,6BAA6B,CACzC,IAAI,EAAE,oBAAoB,EAC1B,OAAO,EAAE;IAAC,OAAO,EAAE,OAAO,CAAA;CAAC,GAC5B,oBAAoB,CAMtB;AAED,wBAAgB,0BAA0B,CACtC,EAAE,EAAE,YAAY,EAChB,kBAAkB,GAAE,OAAO,qBAA6C,EACxE,eAAe,CAAC,EAAE,gBAAgB,EAClC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,EACrD,iBAAiB,CAAC,EAAE,yBAAyB,EAC7C,sBAAsB,CAAC,EAAE,wBAAwB,GAClD,IAAI,CAuBN"}
@@ -1,4 +1,4 @@
1
- import { getAgentDir, } from '@earendil-works/pi-coding-agent';
1
+ import { createCodemodeExtension, createMcpExtension, createToolSearchExtension, getAgentDir, } from '@earendil-works/pi-coding-agent';
2
2
  import { runStartupMaintenance } from '../startup-maintenance.js';
3
3
  import { registerBkperAgentAuthExtension, } from './auth-commands.js';
4
4
  import { getBkperAiBaseUrlOverride, registerBkperAiProvider, } from './bkper-ai-provider.js';
@@ -21,7 +21,9 @@ function normalizeBkperAgentExtension(extension) {
21
21
  if (!isBkperAgentInlineExtensionPath(extension.path)) {
22
22
  return extension;
23
23
  }
24
- return Object.assign(Object.assign({}, extension), { path: BKPER_AGENT_BUILTINS_EXTENSION_PATH, resolvedPath: BKPER_AGENT_BUILTINS_EXTENSION_PATH, sourceInfo: Object.assign(Object.assign({}, extension.sourceInfo), { path: BKPER_AGENT_BUILTINS_EXTENSION_PATH, source: 'inline' }) });
24
+ return Object.assign(Object.assign({}, extension), {
25
+ // Built-ins are part of the agent, not user extensions to list at startup.
26
+ hidden: true, path: BKPER_AGENT_BUILTINS_EXTENSION_PATH, resolvedPath: BKPER_AGENT_BUILTINS_EXTENSION_PATH, sourceInfo: Object.assign(Object.assign({}, extension.sourceInfo), { path: BKPER_AGENT_BUILTINS_EXTENSION_PATH, source: 'inline' }) });
25
27
  }
26
28
  export function normalizeBkperAgentExtensionErrors(errors, options) {
27
29
  return errors.map(error => {
@@ -46,5 +48,11 @@ export function registerBkperAgentBuiltins(pi, startupMaintenance = runStartupMa
46
48
  registerBkperAgentAuthExtension(pi, undefined, credentialManager);
47
49
  registerBkperAiProvider(pi, env);
48
50
  registerBkperHandoffExtension(pi, dispatchHandoffCommand, getBkperHandoffShortcutFromFile(getAgentDir()));
51
+ // Registered inactive; the Bkper default tool selection activates it.
52
+ createCodemodeExtension()(pi);
53
+ // Connects servers the user configures in mcp.json; none are configured by default.
54
+ // tool_search is registered inactive and activated by servers with deferred exposure.
55
+ createToolSearchExtension()(pi);
56
+ createMcpExtension()(pi);
49
57
  }
50
58
  //# sourceMappingURL=builtins.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"builtins.js","sourceRoot":"","sources":["../../../src/agent/extensions/builtins.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"builtins.js","sourceRoot":"","sources":["../../../src/agent/extensions/builtins.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type BeforeAgentStartEventResult, type ExtensionAPI } from '@earendil-works/pi-coding-agent';
1
+ import { type ExtensionAPI } from '@earendil-works/pi-coding-agent';
2
2
  export type CoreConceptsPreloadLevel = 'none' | 'full';
3
3
  export interface CoreConceptsPreloadDefinition {
4
4
  docPath: string;
@@ -7,11 +7,23 @@ export interface CoreConceptsPreloadDefinition {
7
7
  export interface CoreConceptsPreloadInput {
8
8
  prompt: string;
9
9
  }
10
- export type CoreConceptsPreloadResult = BeforeAgentStartEventResult;
11
- export declare const CORE_CONCEPTS_MESSAGE_TYPE = "bkper-core-concepts";
10
+ /** System prompt section that grounds the session in the Bkper data model. */
11
+ export declare const CORE_CONCEPTS_SECTION = "bkper-core-concepts";
12
+ /**
13
+ * Display-only session entry marking where the section was loaded. Never sent to the model.
14
+ * Sessions saved before the section existed carry custom messages of the same type.
15
+ */
16
+ export declare const CORE_CONCEPTS_ENTRY_TYPE = "bkper-core-concepts";
12
17
  export declare function resolveBkperDocPathFromModuleDir(moduleDir: string, relativePath: string): string;
13
18
  export declare function getCoreConceptsDocPath(): string;
14
19
  export declare function getDefaultCoreConceptsPreloadDefinition(): CoreConceptsPreloadDefinition;
15
20
  export declare function detectCoreConceptsPreloadLevel(input: CoreConceptsPreloadInput): CoreConceptsPreloadLevel;
16
- export declare function registerBkperCoreConceptsPreloadExtension(pi: Pick<ExtensionAPI, 'on' | 'registerMessageRenderer'>, definition?: CoreConceptsPreloadDefinition): void;
21
+ /**
22
+ * Grounds accounting and finance sessions in the Bkper data model through a system
23
+ * prompt section. Once loaded, the section is kept for the rest of the session: Pi
24
+ * rebuilds the prompt from its base options on every prompt, so a section that is
25
+ * not set again would be removed. Pi appends the section as a mid-conversation
26
+ * system message, which keeps the cached prefix on models that accept those messages.
27
+ */
28
+ export declare function registerBkperCoreConceptsPreloadExtension(pi: Pick<ExtensionAPI, 'on' | 'registerEntryRenderer' | 'registerMessageRenderer' | 'appendEntry'>, definition?: CoreConceptsPreloadDefinition): void;
17
29
  //# sourceMappingURL=core-concepts-preload.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"core-concepts-preload.d.ts","sourceRoot":"","sources":["../../../src/agent/extensions/core-concepts-preload.ts"],"names":[],"mappings":"AAGA,OAAO,EAGH,KAAK,2BAA2B,EAChC,KAAK,YAAY,EAMpB,MAAM,iCAAiC,CAAC;AAWzC,MAAM,MAAM,wBAAwB,GAAG,MAAM,GAAG,MAAM,CAAC;AAEvD,MAAM,WAAW,6BAA6B;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB;IACrC,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,yBAAyB,GAAG,2BAA2B,CAAC;AAEpE,eAAO,MAAM,0BAA0B,wBAAwB,CAAC;AAUhE,wBAAgB,gCAAgC,CAC5C,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACrB,MAAM,CAaR;AAOD,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAED,wBAAgB,uCAAuC,IAAI,6BAA6B,CAMvF;AAED,wBAAgB,8BAA8B,CAC1C,KAAK,EAAE,wBAAwB,GAChC,wBAAwB,CAoB1B;AAuDD,wBAAgB,yCAAyC,CACrD,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,GAAG,yBAAyB,CAAC,EACxD,UAAU,GAAE,6BAAyE,GACtF,IAAI,CAqBN"}
1
+ {"version":3,"file":"core-concepts-preload.d.ts","sourceRoot":"","sources":["../../../src/agent/extensions/core-concepts-preload.ts"],"names":[],"mappings":"AAGA,OAAO,EAKH,KAAK,YAAY,EAOpB,MAAM,iCAAiC,CAAC;AAWzC,MAAM,MAAM,wBAAwB,GAAG,MAAM,GAAG,MAAM,CAAC;AAEvD,MAAM,WAAW,6BAA6B;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,wBAAwB;IACrC,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,8EAA8E;AAC9E,eAAO,MAAM,qBAAqB,wBAAwB,CAAC;AAE3D;;;GAGG;AACH,eAAO,MAAM,wBAAwB,wBAAwB,CAAC;AAK9D,wBAAgB,gCAAgC,CAC5C,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,GACrB,MAAM,CAaR;AAOD,wBAAgB,sBAAsB,IAAI,MAAM,CAE/C;AAED,wBAAgB,uCAAuC,IAAI,6BAA6B,CAMvF;AAED,wBAAgB,8BAA8B,CAC1C,KAAK,EAAE,wBAAwB,GAChC,wBAAwB,CAoB1B;AA8ED;;;;;;GAMG;AACH,wBAAgB,yCAAyC,CACrD,EAAE,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,GAAG,uBAAuB,GAAG,yBAAyB,GAAG,aAAa,CAAC,EAClG,UAAU,GAAE,6BAAyE,GACtF,IAAI,CA8BN"}
@@ -7,7 +7,13 @@ const DOCS_PATTERN = /\b(doc|docs|documentation|readme|guide|guides|example|exam
7
7
  const ANALYSIS_PATTERN = /\b(review|audit|validate|verify|critique|rewrite|document|describe|explain|design|model|map|check|spot)\b/i;
8
8
  const AUTOMATION_PATTERN = /\b(bot|bots|app|apps|automation|automations)\b/i;
9
9
  const SEMANTIC_PATTERN = /\b(bkper|book|books|account|accounts|group|groups|transaction|transactions|balance|balances|incoming|outgoing|asset|assets|liability|liabilities|receivable|receivables|payable|payables|statement|statements|ledger|flow|flows|movement|movements|collection|collections|tax)\b/i;
10
- export const CORE_CONCEPTS_MESSAGE_TYPE = 'bkper-core-concepts';
10
+ /** System prompt section that grounds the session in the Bkper data model. */
11
+ export const CORE_CONCEPTS_SECTION = 'bkper-core-concepts';
12
+ /**
13
+ * Display-only session entry marking where the section was loaded. Never sent to the model.
14
+ * Sessions saved before the section existed carry custom messages of the same type.
15
+ */
16
+ export const CORE_CONCEPTS_ENTRY_TYPE = 'bkper-core-concepts';
11
17
  export function resolveBkperDocPathFromModuleDir(moduleDir, relativePath) {
12
18
  const candidates = [
13
19
  path.resolve(moduleDir, '..', '..', 'docs', relativePath),
@@ -51,62 +57,86 @@ export function detectCoreConceptsPreloadLevel(input) {
51
57
  }
52
58
  return 'none';
53
59
  }
54
- function buildCoreConceptsMessageContent(definition) {
55
- return `## Bkper Core Concepts\nLoaded from \`${definition.docPath}\`. Base all reasoning about Bkper data on this reference.\n\n${definition.markdown}`;
60
+ function buildCoreConceptsSection(definition) {
61
+ return `Loaded from \`${definition.docPath}\`. Base all reasoning about Bkper data on this reference.\n\n${definition.markdown}`;
56
62
  }
57
- function hasCoreConceptsInContext(entries) {
58
- return entries.some((entry) => entry.type === 'custom_message' && entry.customType === CORE_CONCEPTS_MESSAGE_TYPE);
63
+ /**
64
+ * Whether the section was loaded in this branch, replayed from the transcript's system
65
+ * messages. Compaction checkpoints carry the replayed sections, so this survives
66
+ * compaction, resume, and branch navigation. A load that Pi later removed still counts:
67
+ * runs started without before_agent_start, such as extension-triggered turns, rebuild
68
+ * the prompt without the section, and the next prompt must restore it.
69
+ */
70
+ function wasCoreConceptsLoaded(ctx) {
71
+ const messages = ctx.sessionManager.buildSessionProjection().messages;
72
+ return messages.some(message => { var _a; return message.role === 'system' && typeof ((_a = message.sections) === null || _a === void 0 ? void 0 : _a[CORE_CONCEPTS_SECTION]) === 'string'; });
59
73
  }
60
74
  /**
61
- * Renders the injected message with Pi's own read tool renderers, so it looks
62
- * like a read of the doc: collapsed shows the path, expanded shows the content.
75
+ * Renders the doc with Pi's own read tool renderers, so it looks like a read of the
76
+ * doc: collapsed shows the path, expanded shows the content.
63
77
  */
64
- function createCoreConceptsMessageRenderer(definition) {
65
- return (_message, options, theme) => {
66
- const cwd = process.cwd();
67
- const read = createReadToolDefinition(cwd);
68
- if (!read.renderCall || !read.renderResult) {
69
- return undefined;
70
- }
71
- const args = { path: definition.docPath };
72
- const context = {
73
- args,
74
- toolCallId: CORE_CONCEPTS_MESSAGE_TYPE,
75
- invalidate: () => undefined,
76
- lastComponent: undefined,
77
- state: {},
78
- cwd,
79
- executionStarted: true,
80
- argsComplete: true,
81
- isPartial: false,
82
- expanded: options.expanded,
83
- showImages: false,
84
- isError: false,
85
- };
86
- // Same shell Pi uses for a successful tool row.
87
- const box = new Box(1, 1, (text) => theme.bg('toolSuccessBg', text));
88
- box.addChild(read.renderCall(args, theme, context));
89
- box.addChild(read.renderResult({ content: [{ type: 'text', text: definition.markdown }], details: undefined }, { expanded: options.expanded, isPartial: false }, theme, context));
90
- return box;
78
+ function renderCoreConceptsRead(definition, expanded, theme) {
79
+ const cwd = process.cwd();
80
+ const read = createReadToolDefinition(cwd);
81
+ if (!read.renderCall || !read.renderResult) {
82
+ return undefined;
83
+ }
84
+ const args = { path: definition.docPath };
85
+ const context = {
86
+ args,
87
+ toolCallId: CORE_CONCEPTS_ENTRY_TYPE,
88
+ invalidate: () => undefined,
89
+ lastComponent: undefined,
90
+ state: {},
91
+ cwd,
92
+ executionStarted: true,
93
+ argsComplete: true,
94
+ isPartial: false,
95
+ expanded,
96
+ showImages: false,
97
+ isError: false,
91
98
  };
99
+ // Same shell Pi uses for a successful tool row.
100
+ const box = new Box(1, 1, (text) => theme.bg('toolSuccessBg', text));
101
+ box.addChild(read.renderCall(args, theme, context));
102
+ box.addChild(read.renderResult({ content: [{ type: 'text', text: definition.markdown }], details: undefined }, { expanded, isPartial: false }, theme, context));
103
+ return box;
92
104
  }
105
+ function createCoreConceptsEntryRenderer(definition) {
106
+ return (_entry, options, theme) => renderCoreConceptsRead(definition, options.expanded, theme);
107
+ }
108
+ function createLegacyCoreConceptsMessageRenderer(definition) {
109
+ return (_message, options, theme) => renderCoreConceptsRead(definition, options.expanded, theme);
110
+ }
111
+ /**
112
+ * Grounds accounting and finance sessions in the Bkper data model through a system
113
+ * prompt section. Once loaded, the section is kept for the rest of the session: Pi
114
+ * rebuilds the prompt from its base options on every prompt, so a section that is
115
+ * not set again would be removed. Pi appends the section as a mid-conversation
116
+ * system message, which keeps the cached prefix on models that accept those messages.
117
+ */
93
118
  export function registerBkperCoreConceptsPreloadExtension(pi, definition = getDefaultCoreConceptsPreloadDefinition()) {
94
- pi.registerMessageRenderer(CORE_CONCEPTS_MESSAGE_TYPE, createCoreConceptsMessageRenderer(definition));
119
+ const section = buildCoreConceptsSection(definition);
120
+ let markLoad = false;
121
+ pi.registerEntryRenderer(CORE_CONCEPTS_ENTRY_TYPE, createCoreConceptsEntryRenderer(definition));
122
+ pi.registerMessageRenderer(CORE_CONCEPTS_ENTRY_TYPE, createLegacyCoreConceptsMessageRenderer(definition));
95
123
  pi.on('before_agent_start', (event, ctx) => {
96
- if (detectCoreConceptsPreloadLevel({ prompt: event.prompt }) === 'none') {
97
- return undefined;
124
+ const loaded = wasCoreConceptsLoaded(ctx);
125
+ markLoad = false;
126
+ if (!loaded && detectCoreConceptsPreloadLevel({ prompt: event.prompt }) === 'none') {
127
+ return;
98
128
  }
99
- // Compaction-aware: content summarized away by compaction is injected again.
100
- if (hasCoreConceptsInContext(ctx.sessionManager.buildContextEntries())) {
101
- return undefined;
129
+ event.systemPromptOptions.sections[CORE_CONCEPTS_SECTION] = section;
130
+ markLoad = !loaded;
131
+ });
132
+ // The user prompt is persisted once its message ends, so the first assistant
133
+ // message is the earliest point where the marker lands after the prompt.
134
+ pi.on('message_start', (event) => {
135
+ if (!markLoad || event.message.role !== 'assistant') {
136
+ return;
102
137
  }
103
- return {
104
- message: {
105
- customType: CORE_CONCEPTS_MESSAGE_TYPE,
106
- content: buildCoreConceptsMessageContent(definition),
107
- display: true,
108
- },
109
- };
138
+ markLoad = false;
139
+ pi.appendEntry(CORE_CONCEPTS_ENTRY_TYPE);
110
140
  });
111
141
  }
112
142
  //# sourceMappingURL=core-concepts-preload.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"core-concepts-preload.js","sourceRoot":"","sources":["../../../src/agent/extensions/core-concepts-preload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EACH,wBAAwB,GAS3B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAE7C,MAAM,YAAY,GACd,yFAAyF,CAAC;AAC9F,MAAM,gBAAgB,GAClB,4GAA4G,CAAC;AACjH,MAAM,kBAAkB,GAAG,iDAAiD,CAAC;AAC7E,MAAM,gBAAgB,GAClB,mRAAmR,CAAC;AAexR,MAAM,CAAC,MAAM,0BAA0B,GAAG,qBAAqB,CAAC;AAUhE,MAAM,UAAU,gCAAgC,CAC5C,SAAiB,EACjB,YAAoB;IAEpB,MAAM,UAAU,GAAG;QACf,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC;QACzD,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,CAAC;KACjF,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACjC,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACxB,OAAO,SAAS,CAAC;QACrB,CAAC;IACL,CAAC;IAED,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,cAAc,CAAC,YAAoB;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC7D,OAAO,gCAAgC,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AACnE,CAAC;AAED,MAAM,UAAU,sBAAsB;IAClC,OAAO,cAAc,CAAC,uBAAuB,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,uCAAuC;IACnD,MAAM,OAAO,GAAG,sBAAsB,EAAE,CAAC;IACzC,OAAO;QACH,OAAO;QACP,QAAQ,EAAE,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC;KAC1C,CAAC;AACN,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC1C,KAA+B;IAE/B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1C,MAAM,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClD,MAAM,aAAa,GAAG,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAElD,IAAI,CAAC,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,aAAa,IAAI,WAAW,CAAC,EAAE,CAAC;QAC7D,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QACd,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAS,+BAA+B,CAAC,UAAyC;IAC9E,OAAO,yCAAyC,UAAU,CAAC,OAAO,iEAAiE,UAAU,CAAC,QAAQ,EAAE,CAAC;AAC7J,CAAC;AAED,SAAS,wBAAwB,CAAC,OAA2B;IACzD,OAAO,OAAO,CAAC,IAAI,CACf,CAAC,KAAuB,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,gBAAgB,IAAI,KAAK,CAAC,UAAU,KAAK,0BAA0B,CAClH,CAAC;AACN,CAAC;AAED;;;GAGG;AACH,SAAS,iCAAiC,CAAC,UAAyC;IAChF,OAAO,CAAC,QAAwC,EAAE,OAA6B,EAAE,KAAY,EAAE,EAAE;QAC7F,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,wBAAwB,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACzC,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,MAAM,IAAI,GAAkB,EAAC,IAAI,EAAE,UAAU,CAAC,OAAO,EAAC,CAAC;QACvD,MAAM,OAAO,GAA0B;YACnC,IAAI;YACJ,UAAU,EAAE,0BAA0B;YACtC,UAAU,EAAE,GAAG,EAAE,CAAC,SAAS;YAC3B,aAAa,EAAE,SAAS;YACxB,KAAK,EAAE,EAAE;YACT,GAAG;YACH,gBAAgB,EAAE,IAAI;YACtB,YAAY,EAAE,IAAI;YAClB,SAAS,EAAE,KAAK;YAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,UAAU,EAAE,KAAK;YACjB,OAAO,EAAE,KAAK;SACjB,CAAC;QAEF,gDAAgD;QAChD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC;QAC7E,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;QACpD,GAAG,CAAC,QAAQ,CACR,IAAI,CAAC,YAAY,CACb,EAAC,OAAO,EAAE,CAAC,EAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,CAAC,QAAQ,EAAC,CAAC,EAAE,OAAO,EAAE,SAAS,EAAC,EAC1E,EAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAC,EAC9C,KAAK,EACL,OAAO,CACV,CACJ,CAAC;QACF,OAAO,GAAG,CAAC;IACf,CAAC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,yCAAyC,CACrD,EAAwD,EACxD,aAA4C,uCAAuC,EAAE;IAErF,EAAE,CAAC,uBAAuB,CAAC,0BAA0B,EAAE,iCAAiC,CAAC,UAAU,CAAC,CAAC,CAAC;IAEtG,EAAE,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,KAA4B,EAAE,GAAqB,EAAE,EAAE;QAChF,IAAI,8BAA8B,CAAC,EAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAC,CAAC,KAAK,MAAM,EAAE,CAAC;YACpE,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,6EAA6E;QAC7E,IAAI,wBAAwB,CAAC,GAAG,CAAC,cAAc,CAAC,mBAAmB,EAAE,CAAC,EAAE,CAAC;YACrE,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,OAAO;YACH,OAAO,EAAE;gBACL,UAAU,EAAE,0BAA0B;gBACtC,OAAO,EAAE,+BAA+B,CAAC,UAAU,CAAC;gBACpD,OAAO,EAAE,IAAI;aAChB;SACJ,CAAC;IACN,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"core-concepts-preload.js","sourceRoot":"","sources":["../../../src/agent/extensions/core-concepts-preload.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { type Color, type TerminalColorMode } from '@earendil-works/pi-tui';
2
+ import type { PixelLogo } from '../interactive/logo-3d.js';
3
+ /** The arrow and mark alone, as the 3D logo easter egg builds it. */
4
+ export declare const BKPER_MARK_LOGO: PixelLogo;
5
+ /**
6
+ * Renders a pixel grid with half blocks: each terminal line shows two pixel rows, the upper one
7
+ * as the foreground of '▀' and the lower one as its background.
8
+ */
9
+ export declare function renderPixelArt(pixels: readonly string[], colors: Readonly<Record<string, Color>>, mode: TerminalColorMode): string[];
10
+ /** The logo with wordmark when it fits, the mark alone when only that fits, otherwise nothing. */
11
+ export declare function getBkperLogoLines(maxWidth: number, mode: TerminalColorMode): string[];
12
+ //# sourceMappingURL=startup-logo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup-logo.d.ts","sourceRoot":"","sources":["../../../src/agent/extensions/startup-logo.ts"],"names":[],"mappings":"AAAA,OAAO,EAIH,KAAK,KAAK,EACV,KAAK,iBAAiB,EACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAC,SAAS,EAAC,MAAM,2BAA2B,CAAC;AA+CzD,qEAAqE;AACrE,eAAO,MAAM,eAAe,EAAE,SAG7B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,cAAc,CAC1B,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EACvC,IAAI,EAAE,iBAAiB,GACxB,MAAM,EAAE,CAyBV;AAUD,kGAAkG;AAClG,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAarF"}
@@ -0,0 +1,101 @@
1
+ import { backgroundAnsi, foregroundAnsi, rgbColor, } from '@earendil-works/pi-tui';
2
+ const RESET = '\x1b[0m';
3
+ /** Official logo colors; the four mark colors are the four Bkper account type colors. */
4
+ const BKPER_LOGO_COLORS = {
5
+ B: rgbColor(34, 133, 192), // #2285c0 Asset blue
6
+ D: rgbColor(30, 119, 173), // #1e77ad stem shade under the bar
7
+ R: rgbColor(209, 72, 54), // #d14836 Outgoing red
8
+ Y: rgbColor(247, 179, 0), // #f7b300 Liability yellow
9
+ G: rgbColor(58, 170, 87), // #3aaa57 Incoming green
10
+ W: rgbColor(153, 153, 153), // #999999 arrow and wordmark gray
11
+ };
12
+ /**
13
+ * The Bkper logo as square pixels, two pixel rows per terminal line. The mark is the official
14
+ * icon geometry sampled at 2 pixels per logo unit; the wordmark sits on the mark's baseline.
15
+ * '.' is transparent.
16
+ */
17
+ const BKPER_LOGO_PIXELS = [
18
+ '.......BB.............................................',
19
+ '......BBBB............................................',
20
+ '......BBBB............................................',
21
+ '......BBBB............................................',
22
+ '......BBBB............................................',
23
+ '......BBBB............................................',
24
+ '......BBBB............................................',
25
+ '......BBBB............................................',
26
+ '......BRRRRRRYYYY.....................................',
27
+ '......RRRRRRYYYYYY....................................',
28
+ '......RRRRRRYYYYYYY...................................',
29
+ '......BRRRRRRYYYYYYY..................................',
30
+ '......BBDD.....YYYYY..................................',
31
+ '......BBDD......YYYY..W......W........................',
32
+ '......BBBD......YYYY..W......W........................',
33
+ 'W.....BBBB.....YYYYY..W.WW...W..W..W.WW....WWW...W.WW.',
34
+ 'WW....BBBBGGGGGYYYYY..WW..W..W.W...WW..W..W...W..WW...',
35
+ 'WWW...BBBBGGGGGGYYY...W...W..WW....W...W..WWWWW..W....',
36
+ 'WW....BBBBGGGGGGYY....WW..W..W.W...WW..W..W......W....',
37
+ 'W......BBBGGGGGGY.....W.WW...W..W..W.WW....WWW...W....',
38
+ '...................................W..................',
39
+ '...................................W..................',
40
+ ];
41
+ /** Width of the arrow and mark, without the wordmark. */
42
+ const BKPER_MARK_WIDTH = 20;
43
+ /** The arrow and mark alone, as the 3D logo easter egg builds it. */
44
+ export const BKPER_MARK_LOGO = {
45
+ pixels: cropPixels(BKPER_LOGO_PIXELS, BKPER_MARK_WIDTH),
46
+ colors: BKPER_LOGO_COLORS,
47
+ };
48
+ /**
49
+ * Renders a pixel grid with half blocks: each terminal line shows two pixel rows, the upper one
50
+ * as the foreground of '▀' and the lower one as its background.
51
+ */
52
+ export function renderPixelArt(pixels, colors, mode) {
53
+ var _a;
54
+ const lines = [];
55
+ for (let row = 0; row < pixels.length; row += 2) {
56
+ const upper = pixels[row];
57
+ const lower = (_a = pixels[row + 1]) !== null && _a !== void 0 ? _a : '';
58
+ const width = Math.max(upper.length, lower.length);
59
+ let line = '';
60
+ for (let column = 0; column < width; column++) {
61
+ const top = colors[upper[column]];
62
+ const bottom = colors[lower[column]];
63
+ if (top && bottom && top === bottom) {
64
+ line += `${foregroundAnsi(top, mode)}█${RESET}`;
65
+ }
66
+ else if (top && bottom) {
67
+ line += `${foregroundAnsi(top, mode)}${backgroundAnsi(bottom, mode)}▀${RESET}`;
68
+ }
69
+ else if (top) {
70
+ line += `${foregroundAnsi(top, mode)}▀${RESET}`;
71
+ }
72
+ else if (bottom) {
73
+ line += `${foregroundAnsi(bottom, mode)}▄${RESET}`;
74
+ }
75
+ else {
76
+ line += ' ';
77
+ }
78
+ }
79
+ lines.push(line);
80
+ }
81
+ return lines;
82
+ }
83
+ function cropPixels(pixels, width) {
84
+ const cropped = pixels.map(row => row.slice(0, width));
85
+ while (cropped.length > 0 && /^\.*$/.test(cropped[cropped.length - 1])) {
86
+ cropped.pop();
87
+ }
88
+ return cropped;
89
+ }
90
+ /** The logo with wordmark when it fits, the mark alone when only that fits, otherwise nothing. */
91
+ export function getBkperLogoLines(maxWidth, mode) {
92
+ const fullWidth = Math.max(...BKPER_LOGO_PIXELS.map(row => row.length));
93
+ if (maxWidth >= fullWidth) {
94
+ return renderPixelArt(cropPixels(BKPER_LOGO_PIXELS, fullWidth), BKPER_LOGO_COLORS, mode);
95
+ }
96
+ if (maxWidth >= BKPER_MARK_WIDTH) {
97
+ return renderPixelArt(cropPixels(BKPER_LOGO_PIXELS, BKPER_MARK_WIDTH), BKPER_LOGO_COLORS, mode);
98
+ }
99
+ return [];
100
+ }
101
+ //# sourceMappingURL=startup-logo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"startup-logo.js","sourceRoot":"","sources":["../../../src/agent/extensions/startup-logo.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import { type ExtensionAPI } from '@earendil-works/pi-coding-agent';
1
+ import { type ExtensionAPI, type QuietStartup } from '@earendil-works/pi-coding-agent';
2
2
  import { runStartupMaintenance } from '../startup-maintenance.js';
3
3
  type StartupExtensionAPI = Pick<ExtensionAPI, 'on'>;
4
4
  export declare function registerBkperAgentStartupExtension(pi: StartupExtensionAPI, startupMaintenance?: typeof runStartupMaintenance, settingsManager?: {
5
- getQuietStartup(): boolean;
5
+ getQuietStartup(): QuietStartup;
6
6
  getShellPath?(): string | undefined;
7
7
  getDefaultTools?(): string[] | undefined;
8
8
  }, bkperAiBaseUrlOverride?: string, bashAvailable?: boolean): void;
@@ -1 +1 @@
1
- {"version":3,"file":"startup.d.ts","sourceRoot":"","sources":["../../../src/agent/extensions/startup.ts"],"names":[],"mappings":"AACA,OAAO,EAIH,KAAK,YAAY,EAEpB,MAAM,iCAAiC,CAAC;AAMzC,OAAO,EAAC,qBAAqB,EAAC,MAAM,2BAA2B,CAAC;AAUhE,KAAK,mBAAmB,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AAsKpD,wBAAgB,kCAAkC,CAC9C,EAAE,EAAE,mBAAmB,EACvB,kBAAkB,GAAE,OAAO,qBAA6C,EACxE,eAAe,CAAC,EAAE;IACd,eAAe,IAAI,OAAO,CAAC;IAC3B,YAAY,CAAC,IAAI,MAAM,GAAG,SAAS,CAAC;IACpC,eAAe,CAAC,IAAI,MAAM,EAAE,GAAG,SAAS,CAAC;CAC5C,EACD,sBAAsB,CAAC,EAAE,MAAM,EAC/B,aAAa,CAAC,EAAE,OAAO,GACxB,IAAI,CA8BN"}
1
+ {"version":3,"file":"startup.d.ts","sourceRoot":"","sources":["../../../src/agent/extensions/startup.ts"],"names":[],"mappings":"AAOA,OAAO,EAIH,KAAK,YAAY,EACjB,KAAK,YAAY,EAEpB,MAAM,iCAAiC,CAAC;AAMzC,OAAO,EAAC,qBAAqB,EAAC,MAAM,2BAA2B,CAAC;AAahE,KAAK,mBAAmB,GAAG,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AAoMpD,wBAAgB,kCAAkC,CAC9C,EAAE,EAAE,mBAAmB,EACvB,kBAAkB,GAAE,OAAO,qBAA6C,EACxE,eAAe,CAAC,EAAE;IACd,eAAe,IAAI,YAAY,CAAC;IAChC,YAAY,CAAC,IAAI,MAAM,GAAG,SAAS,CAAC;IACpC,eAAe,CAAC,IAAI,MAAM,EAAE,GAAG,SAAS,CAAC;CAC5C,EACD,sBAAsB,CAAC,EAAE,MAAM,EAC/B,aAAa,CAAC,EAAE,OAAO,GACxB,IAAI,CA+BN"}