0xkobold 0.7.2 → 0.8.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/HEARTBEAT.md +239 -0
- package/IDENTITY.md +12 -0
- package/README.md +138 -4
- package/SOUL.md +21 -0
- package/dist/package.json +10 -5
- package/dist/src/agent/bootstrap-loader.js +295 -66
- package/dist/src/agent/bootstrap-loader.js.map +1 -1
- package/dist/src/agent/context-pruning.js +10 -5
- package/dist/src/agent/context-pruning.js.map +1 -1
- package/dist/src/agent/embedded-runner.js +29 -15
- package/dist/src/agent/embedded-runner.js.map +1 -1
- package/dist/src/agent/index.js +5 -2
- package/dist/src/agent/index.js.map +1 -1
- package/dist/src/agent/system-prompt.js +167 -20
- package/dist/src/agent/system-prompt.js.map +1 -1
- package/dist/src/agent/tools/spawn-agent.js +72 -5
- package/dist/src/agent/tools/spawn-agent.js.map +1 -1
- package/dist/src/channels/slack/webhook.js +2 -2
- package/dist/src/channels/slack/webhook.js.map +1 -1
- package/dist/src/channels/telegram/bot.js +4 -4
- package/dist/src/channels/telegram/bot.js.map +1 -1
- package/dist/src/channels/whatsapp/integration.js +4 -4
- package/dist/src/channels/whatsapp/integration.js.map +1 -1
- package/dist/src/cli/commands/gateway.js +9 -10
- package/dist/src/cli/commands/gateway.js.map +1 -1
- package/dist/src/cli/commands/init.js +90 -0
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/commands/setup.js +53 -0
- package/dist/src/cli/commands/setup.js.map +1 -1
- package/dist/src/cli/index.js +0 -0
- package/dist/src/config/unified-config.js +5 -0
- package/dist/src/config/unified-config.js.map +1 -1
- package/dist/src/cron/index.js +2 -0
- package/dist/src/cron/index.js.map +1 -1
- package/dist/src/cron/nl-parser.js +522 -0
- package/dist/src/cron/nl-parser.js.map +1 -0
- package/dist/src/cron/runner.js +6 -31
- package/dist/src/cron/runner.js.map +1 -1
- package/dist/src/event-bus/index.js.map +1 -1
- package/dist/src/extensions/core/agent-orchestrator-extension.js +200 -148
- package/dist/src/extensions/core/agent-orchestrator-extension.js.map +1 -1
- package/dist/src/extensions/core/diagnostics-extension.js +93 -56
- package/dist/src/extensions/core/diagnostics-extension.js.map +1 -1
- package/dist/src/extensions/core/draconic-safety-extension.js +256 -3
- package/dist/src/extensions/core/draconic-safety-extension.js.map +1 -1
- package/dist/src/extensions/core/heartbeat-extension.js +416 -150
- package/dist/src/extensions/core/heartbeat-extension.js.map +1 -1
- package/dist/src/extensions/core/{generative-agents-extension.js → learning-extension.js} +90 -128
- package/dist/src/extensions/core/learning-extension.js.map +1 -0
- package/dist/src/extensions/core/perennial-memory-extension.js +884 -87
- package/dist/src/extensions/core/perennial-memory-extension.js.map +1 -1
- package/dist/src/extensions/core/routed-ollama-extension.js +345 -0
- package/dist/src/extensions/core/routed-ollama-extension.js.map +1 -0
- package/dist/src/extensions/core/task-manager-extension.js +25 -2
- package/dist/src/extensions/core/task-manager-extension.js.map +1 -1
- package/dist/src/extensions/core/websearch-enhanced-extension.js +81 -23
- package/dist/src/extensions/core/websearch-enhanced-extension.js.map +1 -1
- package/dist/src/extensions/core/workspace-footer-extension.js +40 -63
- package/dist/src/extensions/core/workspace-footer-extension.js.map +1 -1
- package/dist/src/extensions/loader.js +5 -1
- package/dist/src/extensions/loader.js.map +1 -1
- package/dist/src/gateway/gateway-server.js +74 -3
- package/dist/src/gateway/gateway-server.js.map +1 -1
- package/dist/src/gateway/index.js +2 -2
- package/dist/src/gateway/index.js.map +1 -1
- package/dist/src/gateway/methods/agent.js +1 -1
- package/dist/src/gateway/methods/agent.js.map +1 -1
- package/dist/src/gateway/methods/index.js +4 -0
- package/dist/src/gateway/methods/index.js.map +1 -1
- package/dist/src/gateway/methods/node.js +261 -0
- package/dist/src/gateway/methods/node.js.map +1 -0
- package/dist/src/gateway/queue-modes.js +356 -0
- package/dist/src/gateway/queue-modes.js.map +1 -0
- package/dist/src/index.js +47 -6
- package/dist/src/index.js.map +1 -1
- package/dist/src/llm/community-analytics.js +569 -0
- package/dist/src/llm/community-analytics.js.map +1 -0
- package/dist/src/llm/index.js +28 -4
- package/dist/src/llm/index.js.map +1 -1
- package/dist/src/llm/model-discovery.js +335 -0
- package/dist/src/llm/model-discovery.js.map +1 -0
- package/dist/src/llm/model-popularity.js +566 -0
- package/dist/src/llm/model-popularity.js.map +1 -0
- package/dist/src/llm/model-scoring-db.js +553 -0
- package/dist/src/llm/model-scoring-db.js.map +1 -0
- package/dist/src/llm/multi-provider.js +258 -0
- package/dist/src/llm/multi-provider.js.map +1 -0
- package/dist/src/llm/ollama.js +133 -187
- package/dist/src/llm/ollama.js.map +1 -1
- package/dist/src/llm/router-commands.js +773 -0
- package/dist/src/llm/router-commands.js.map +1 -0
- package/dist/src/llm/router-core.js +600 -0
- package/dist/src/llm/router-core.js.map +1 -0
- package/dist/src/memory/checkpoint-manager.js +278 -0
- package/dist/src/memory/checkpoint-manager.js.map +1 -0
- package/dist/src/memory/conflict-detector.js +279 -0
- package/dist/src/memory/conflict-detector.js.map +1 -0
- package/dist/src/memory/context-graph.js +360 -0
- package/dist/src/memory/context-graph.js.map +1 -0
- package/dist/src/memory/dialectic/benchmark-cli.js +200 -0
- package/dist/src/memory/dialectic/benchmark-cli.js.map +1 -0
- package/dist/src/memory/dialectic/debug-reasoning.js +37 -0
- package/dist/src/memory/dialectic/debug-reasoning.js.map +1 -0
- package/dist/src/memory/dialectic/index.js +135 -0
- package/dist/src/memory/dialectic/index.js.map +1 -0
- package/dist/src/memory/dialectic/nudges.js +380 -0
- package/dist/src/memory/dialectic/nudges.js.map +1 -0
- package/dist/src/memory/dialectic/reasoning-engine.js +607 -0
- package/dist/src/memory/dialectic/reasoning-engine.js.map +1 -0
- package/dist/src/memory/dialectic/reasoning.js +390 -0
- package/dist/src/memory/dialectic/reasoning.js.map +1 -0
- package/dist/src/memory/dialectic/skill-creation.js +481 -0
- package/dist/src/memory/dialectic/skill-creation.js.map +1 -0
- package/dist/src/memory/dialectic/store.js +663 -0
- package/dist/src/memory/dialectic/store.js.map +1 -0
- package/dist/src/memory/dialectic/types.js +11 -0
- package/dist/src/memory/dialectic/types.js.map +1 -0
- package/dist/src/memory/index.js +24 -2
- package/dist/src/memory/index.js.map +1 -1
- package/dist/src/memory/memory-decay.js +350 -0
- package/dist/src/memory/memory-decay.js.map +1 -0
- package/dist/src/memory/memory-integration.js +5 -5
- package/dist/src/memory/memory-integration.js.map +1 -1
- package/dist/src/memory/migrate-memory-stream.js +97 -0
- package/dist/src/memory/migrate-memory-stream.js.map +1 -0
- package/dist/src/memory/session-memory-bridge.js +49 -5
- package/dist/src/memory/session-memory-bridge.js.map +1 -1
- package/dist/src/memory/session-store.js +123 -0
- package/dist/src/memory/session-store.js.map +1 -1
- package/dist/src/memory/smart-write-rules.js +164 -0
- package/dist/src/memory/smart-write-rules.js.map +1 -0
- package/dist/src/memory/tiered-memory.js +436 -0
- package/dist/src/memory/tiered-memory.js.map +1 -0
- package/dist/src/memory/types.js +6 -0
- package/dist/src/memory/types.js.map +1 -0
- package/dist/src/memory/verify-migration.js +99 -0
- package/dist/src/memory/verify-migration.js.map +1 -0
- package/dist/src/pi-config.js +11 -9
- package/dist/src/pi-config.js.map +1 -1
- package/dist/src/skills/conditional-skills.js +464 -0
- package/dist/src/skills/conditional-skills.js.map +1 -0
- package/dist/src/skills/index.js +5 -0
- package/dist/src/skills/index.js.map +1 -1
- package/dist/src/skills/loader.js +56 -0
- package/dist/src/skills/loader.js.map +1 -1
- package/dist/src/skills/skill-manage.js +417 -0
- package/dist/src/skills/skill-manage.js.map +1 -0
- package/dist/src/tui/commands/orchestration-commands.js +62 -0
- package/dist/src/tui/commands/orchestration-commands.js.map +1 -1
- package/package.json +10 -5
- package/skills/model-router-test.ts +65 -0
- package/dist/src/extensions/core/auto-security-scan-extension.js +0 -41
- package/dist/src/extensions/core/auto-security-scan-extension.js.map +0 -1
- package/dist/src/extensions/core/cloudflare-browser-extension.js +0 -389
- package/dist/src/extensions/core/cloudflare-browser-extension.js.map +0 -1
- package/dist/src/extensions/core/compaction-safeguard.js +0 -223
- package/dist/src/extensions/core/compaction-safeguard.js.map +0 -1
- package/dist/src/extensions/core/generative-agents-extension.js.map +0 -1
- package/dist/src/extensions/core/obsidian-bridge-extension.js +0 -488
- package/dist/src/extensions/core/obsidian-bridge-extension.js.map +0 -1
- package/dist/src/llm/router.js +0 -145
- package/dist/src/llm/router.js.map +0 -1
- package/skills/kobold-scan-skill/node_modules/.package-lock.json +0 -172
- package/skills/kobold-scan-skill/node_modules/ansi-styles/index.d.ts +0 -345
- package/skills/kobold-scan-skill/node_modules/ansi-styles/index.js +0 -163
- package/skills/kobold-scan-skill/node_modules/ansi-styles/license +0 -9
- package/skills/kobold-scan-skill/node_modules/ansi-styles/package.json +0 -56
- package/skills/kobold-scan-skill/node_modules/ansi-styles/readme.md +0 -152
- package/skills/kobold-scan-skill/node_modules/balanced-match/.github/FUNDING.yml +0 -2
- package/skills/kobold-scan-skill/node_modules/balanced-match/LICENSE.md +0 -21
- package/skills/kobold-scan-skill/node_modules/balanced-match/README.md +0 -97
- package/skills/kobold-scan-skill/node_modules/balanced-match/index.js +0 -62
- package/skills/kobold-scan-skill/node_modules/balanced-match/package.json +0 -48
- package/skills/kobold-scan-skill/node_modules/brace-expansion/.github/FUNDING.yml +0 -2
- package/skills/kobold-scan-skill/node_modules/brace-expansion/LICENSE +0 -21
- package/skills/kobold-scan-skill/node_modules/brace-expansion/README.md +0 -135
- package/skills/kobold-scan-skill/node_modules/brace-expansion/index.js +0 -203
- package/skills/kobold-scan-skill/node_modules/brace-expansion/package.json +0 -49
- package/skills/kobold-scan-skill/node_modules/chalk/index.d.ts +0 -415
- package/skills/kobold-scan-skill/node_modules/chalk/license +0 -9
- package/skills/kobold-scan-skill/node_modules/chalk/package.json +0 -68
- package/skills/kobold-scan-skill/node_modules/chalk/readme.md +0 -341
- package/skills/kobold-scan-skill/node_modules/chalk/source/index.js +0 -229
- package/skills/kobold-scan-skill/node_modules/chalk/source/templates.js +0 -134
- package/skills/kobold-scan-skill/node_modules/chalk/source/util.js +0 -39
- package/skills/kobold-scan-skill/node_modules/color-convert/CHANGELOG.md +0 -54
- package/skills/kobold-scan-skill/node_modules/color-convert/LICENSE +0 -21
- package/skills/kobold-scan-skill/node_modules/color-convert/README.md +0 -68
- package/skills/kobold-scan-skill/node_modules/color-convert/conversions.js +0 -839
- package/skills/kobold-scan-skill/node_modules/color-convert/index.js +0 -81
- package/skills/kobold-scan-skill/node_modules/color-convert/package.json +0 -48
- package/skills/kobold-scan-skill/node_modules/color-convert/route.js +0 -97
- package/skills/kobold-scan-skill/node_modules/color-name/LICENSE +0 -8
- package/skills/kobold-scan-skill/node_modules/color-name/README.md +0 -11
- package/skills/kobold-scan-skill/node_modules/color-name/index.js +0 -152
- package/skills/kobold-scan-skill/node_modules/color-name/package.json +0 -28
- package/skills/kobold-scan-skill/node_modules/commander/LICENSE +0 -22
- package/skills/kobold-scan-skill/node_modules/commander/Readme.md +0 -1129
- package/skills/kobold-scan-skill/node_modules/commander/esm.mjs +0 -16
- package/skills/kobold-scan-skill/node_modules/commander/index.js +0 -27
- package/skills/kobold-scan-skill/node_modules/commander/lib/argument.js +0 -147
- package/skills/kobold-scan-skill/node_modules/commander/lib/command.js +0 -2179
- package/skills/kobold-scan-skill/node_modules/commander/lib/error.js +0 -45
- package/skills/kobold-scan-skill/node_modules/commander/lib/help.js +0 -461
- package/skills/kobold-scan-skill/node_modules/commander/lib/option.js +0 -326
- package/skills/kobold-scan-skill/node_modules/commander/lib/suggestSimilar.js +0 -100
- package/skills/kobold-scan-skill/node_modules/commander/package-support.json +0 -16
- package/skills/kobold-scan-skill/node_modules/commander/package.json +0 -80
- package/skills/kobold-scan-skill/node_modules/commander/typings/index.d.ts +0 -891
- package/skills/kobold-scan-skill/node_modules/fs.realpath/LICENSE +0 -43
- package/skills/kobold-scan-skill/node_modules/fs.realpath/README.md +0 -33
- package/skills/kobold-scan-skill/node_modules/fs.realpath/index.js +0 -66
- package/skills/kobold-scan-skill/node_modules/fs.realpath/old.js +0 -303
- package/skills/kobold-scan-skill/node_modules/fs.realpath/package.json +0 -26
- package/skills/kobold-scan-skill/node_modules/glob/LICENSE +0 -15
- package/skills/kobold-scan-skill/node_modules/glob/README.md +0 -399
- package/skills/kobold-scan-skill/node_modules/glob/common.js +0 -244
- package/skills/kobold-scan-skill/node_modules/glob/glob.js +0 -790
- package/skills/kobold-scan-skill/node_modules/glob/package.json +0 -55
- package/skills/kobold-scan-skill/node_modules/glob/sync.js +0 -486
- package/skills/kobold-scan-skill/node_modules/has-flag/index.d.ts +0 -39
- package/skills/kobold-scan-skill/node_modules/has-flag/index.js +0 -8
- package/skills/kobold-scan-skill/node_modules/has-flag/license +0 -9
- package/skills/kobold-scan-skill/node_modules/has-flag/package.json +0 -46
- package/skills/kobold-scan-skill/node_modules/has-flag/readme.md +0 -89
- package/skills/kobold-scan-skill/node_modules/inflight/LICENSE +0 -15
- package/skills/kobold-scan-skill/node_modules/inflight/README.md +0 -37
- package/skills/kobold-scan-skill/node_modules/inflight/inflight.js +0 -54
- package/skills/kobold-scan-skill/node_modules/inflight/package.json +0 -29
- package/skills/kobold-scan-skill/node_modules/inherits/LICENSE +0 -16
- package/skills/kobold-scan-skill/node_modules/inherits/README.md +0 -42
- package/skills/kobold-scan-skill/node_modules/inherits/inherits.js +0 -9
- package/skills/kobold-scan-skill/node_modules/inherits/inherits_browser.js +0 -27
- package/skills/kobold-scan-skill/node_modules/inherits/package.json +0 -29
- package/skills/kobold-scan-skill/node_modules/minimatch/LICENSE +0 -15
- package/skills/kobold-scan-skill/node_modules/minimatch/README.md +0 -259
- package/skills/kobold-scan-skill/node_modules/minimatch/lib/path.js +0 -4
- package/skills/kobold-scan-skill/node_modules/minimatch/minimatch.js +0 -944
- package/skills/kobold-scan-skill/node_modules/minimatch/package.json +0 -35
- package/skills/kobold-scan-skill/node_modules/once/LICENSE +0 -15
- package/skills/kobold-scan-skill/node_modules/once/README.md +0 -79
- package/skills/kobold-scan-skill/node_modules/once/once.js +0 -42
- package/skills/kobold-scan-skill/node_modules/once/package.json +0 -33
- package/skills/kobold-scan-skill/node_modules/supports-color/browser.js +0 -5
- package/skills/kobold-scan-skill/node_modules/supports-color/index.js +0 -135
- package/skills/kobold-scan-skill/node_modules/supports-color/license +0 -9
- package/skills/kobold-scan-skill/node_modules/supports-color/package.json +0 -53
- package/skills/kobold-scan-skill/node_modules/supports-color/readme.md +0 -76
- package/skills/kobold-scan-skill/node_modules/wrappy/LICENSE +0 -15
- package/skills/kobold-scan-skill/node_modules/wrappy/README.md +0 -36
- package/skills/kobold-scan-skill/node_modules/wrappy/package.json +0 -29
- package/skills/kobold-scan-skill/node_modules/wrappy/wrappy.js +0 -33
|
@@ -1,138 +1,367 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Bootstrap Loader - v0.
|
|
2
|
+
* Bootstrap Loader - v0.4.0
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
4
|
+
* HERMES-STYLE IDENTITY LOADING:
|
|
5
|
+
* - SOUL.md lives ONLY in KOBOLD_HOME (instance-level, not repo-local)
|
|
6
|
+
* - Personalities are session-level overlays (/personality command)
|
|
7
|
+
* - AGENTS.md is project-local (hierarchical discovery)
|
|
8
|
+
* - No per-agent SOUL/IDENTITY - subagents share instance identity
|
|
9
|
+
*
|
|
10
|
+
* Inspired by Hermes Agent: https://hermes-agent.nousresearch.com
|
|
6
11
|
*/
|
|
7
12
|
import * as fs from "node:fs/promises";
|
|
8
13
|
import * as path from "node:path";
|
|
9
14
|
import { existsSync } from "node:fs";
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Files loaded from KOBOLD_HOME (instance-level identity)
|
|
17
|
+
* These follow you everywhere - your baseline personality
|
|
18
|
+
*/
|
|
19
|
+
export const INSTANCE_FILES = ["SOUL.md", "IDENTITY.md", "USER.md", "HEARTBEAT.md"];
|
|
20
|
+
/**
|
|
21
|
+
* Files discovered from working directory (project-specific)
|
|
22
|
+
*/
|
|
23
|
+
export const PROJECT_FILES = ["AGENTS.md", ".cursorrules", ".cursor/rules"];
|
|
24
|
+
/**
|
|
25
|
+
* Security: Prompt injection patterns (Hermes-style)
|
|
26
|
+
*/
|
|
27
|
+
const INJECTION_PATTERNS = [
|
|
28
|
+
/ignore\s+(previous|all|your)\s+(instructions?|rules?|directives?)/gi,
|
|
29
|
+
/disregard\s+(your|all|previous)\s+(instructions?|rules?)/gi,
|
|
30
|
+
/forget\s+(your|all|previous)\s+(instructions?|programming)/gi,
|
|
31
|
+
/system\s*prompt\s*override/gi,
|
|
32
|
+
/new\s+(system|developer|admin)\s+(prompt|instructions?)/gi,
|
|
33
|
+
/you\s+are\s+now\s+(a|an)\s+/gi,
|
|
34
|
+
/<\s*!--.*?-->/gs,
|
|
35
|
+
/<div[^>]*style\s*=\s*["']display\s*:\s*none[^>]*>/gi,
|
|
36
|
+
/(?:api[_-]?key|token|secret|password|credential)\s*[:=]/gi,
|
|
37
|
+
/curl\s+.*?\$(?:API_KEY|TOKEN|SECRET)/gi,
|
|
38
|
+
/cat\s+\.env/gi,
|
|
39
|
+
/[\u200B-\u200F\u2028-\u202F\u205F-\u206F]/g,
|
|
18
40
|
];
|
|
19
|
-
const DEFAULT_CONFIG = {
|
|
20
|
-
maxFileSize: 20000,
|
|
21
|
-
maxTotalSize: 150000,
|
|
22
|
-
files: DEFAULT_BOOTSTRAP_FILES,
|
|
23
|
-
};
|
|
24
41
|
/**
|
|
25
|
-
*
|
|
42
|
+
* Get the Kobold home directory
|
|
43
|
+
* Like HERMES_HOME, this is where instance-level files live
|
|
26
44
|
*/
|
|
27
|
-
export
|
|
28
|
-
|
|
45
|
+
export function getKoboldHome() {
|
|
46
|
+
return process.env.KOBOLD_HOME ||
|
|
47
|
+
process.env.KOBOLD_WORKSPACE ||
|
|
48
|
+
path.join(process.env.HOME || "", ".0xkobold");
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Scan content for prompt injection patterns
|
|
52
|
+
*/
|
|
53
|
+
function detectInjection(content) {
|
|
54
|
+
for (const pattern of INJECTION_PATTERNS) {
|
|
55
|
+
if (pattern.test(content)) {
|
|
56
|
+
return {
|
|
57
|
+
safe: false,
|
|
58
|
+
reason: `Potential prompt injection detected`
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return { safe: true };
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Truncate with head/tail preservation (Hermes style)
|
|
66
|
+
* 70% head, 20% tail, 10% marker
|
|
67
|
+
*/
|
|
68
|
+
function truncateWithHeadTail(content, maxSize) {
|
|
69
|
+
if (content.length <= maxSize)
|
|
70
|
+
return content;
|
|
71
|
+
const headSize = Math.floor(maxSize * 0.70);
|
|
72
|
+
const tailSize = Math.floor(maxSize * 0.20);
|
|
73
|
+
const head = content.slice(0, headSize);
|
|
74
|
+
const tail = content.slice(-tailSize);
|
|
75
|
+
const marker = `\n\n[...truncated: kept ${headSize}+${tailSize} of ${content.length} chars. Use file tools to read full content.]\n\n`;
|
|
76
|
+
return head + marker + tail;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Load instance-level files (SOUL.md, IDENTITY.md, USER.md)
|
|
80
|
+
* These come from KOBOLD_HOME ONLY - never from working directory
|
|
81
|
+
* This is the Hermes philosophy: stable instance-level identity
|
|
82
|
+
*/
|
|
83
|
+
export async function loadInstanceFiles(config = {}) {
|
|
84
|
+
const home = config.homeDir || getKoboldHome();
|
|
29
85
|
const results = [];
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
const filePath = path.join(workspaceDir, filename);
|
|
86
|
+
for (const filename of INSTANCE_FILES) {
|
|
87
|
+
const filePath = path.join(home, filename);
|
|
33
88
|
if (!existsSync(filePath)) {
|
|
34
89
|
results.push({
|
|
35
90
|
name: filename,
|
|
36
|
-
content:
|
|
91
|
+
content: "",
|
|
37
92
|
exists: false,
|
|
38
93
|
size: 0,
|
|
94
|
+
source: "instance",
|
|
39
95
|
});
|
|
40
96
|
continue;
|
|
41
97
|
}
|
|
42
98
|
try {
|
|
43
|
-
|
|
44
|
-
//
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
99
|
+
let content = await fs.readFile(filePath, "utf-8");
|
|
100
|
+
// Security scan
|
|
101
|
+
if (config.enableInjectionProtection !== false) {
|
|
102
|
+
const scan = detectInjection(content);
|
|
103
|
+
if (!scan.safe) {
|
|
104
|
+
console.warn(`[Bootstrap] BLOCKED: ${filename} - ${scan.reason}`);
|
|
105
|
+
results.push({
|
|
106
|
+
name: filename,
|
|
107
|
+
content: `[BLOCKED: ${filename} contained ${scan.reason}]`,
|
|
108
|
+
exists: true,
|
|
109
|
+
size: 0,
|
|
110
|
+
source: "instance",
|
|
111
|
+
blocked: true,
|
|
112
|
+
blockReason: scan.reason,
|
|
113
|
+
});
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
49
116
|
}
|
|
117
|
+
// Truncate if needed
|
|
118
|
+
const maxSize = config.maxFileSize || 20000;
|
|
119
|
+
const finalContent = truncateWithHeadTail(content, maxSize);
|
|
50
120
|
results.push({
|
|
51
121
|
name: filename,
|
|
52
122
|
content: finalContent,
|
|
53
123
|
exists: true,
|
|
54
124
|
size: finalContent.length,
|
|
125
|
+
source: "instance",
|
|
55
126
|
});
|
|
56
|
-
totalSize += finalContent.length;
|
|
57
|
-
// Check total limit
|
|
58
|
-
if (totalSize > mergedConfig.maxTotalSize) {
|
|
59
|
-
console.warn(`[Bootstrap] Total size exceeded ${mergedConfig.maxTotalSize}, stopping`);
|
|
60
|
-
break;
|
|
61
|
-
}
|
|
62
127
|
}
|
|
63
128
|
catch (error) {
|
|
64
129
|
results.push({
|
|
65
130
|
name: filename,
|
|
66
|
-
content:
|
|
131
|
+
content: "",
|
|
67
132
|
exists: false,
|
|
68
133
|
size: 0,
|
|
134
|
+
source: "instance",
|
|
69
135
|
});
|
|
70
136
|
}
|
|
71
137
|
}
|
|
72
138
|
return results;
|
|
73
139
|
}
|
|
140
|
+
/**
|
|
141
|
+
* Hierarchical AGENTS.md discovery (Hermes style)
|
|
142
|
+
* Walks directory tree starting from working directory
|
|
143
|
+
* This is project-specific context that SHOULD vary by project
|
|
144
|
+
*/
|
|
145
|
+
export async function discoverProjectFiles(workingDir, config = {}) {
|
|
146
|
+
const workDir = workingDir || config.workingDir || process.cwd();
|
|
147
|
+
const results = [];
|
|
148
|
+
const skipDirs = new Set([
|
|
149
|
+
"node_modules", ".git", "dist", "build", "__pycache__",
|
|
150
|
+
".venv", "venv", "vendor", ".next", ".nuxt", "target", "vendor"
|
|
151
|
+
]);
|
|
152
|
+
async function walk(dir, depth) {
|
|
153
|
+
if (depth > 10)
|
|
154
|
+
return; // Max depth
|
|
155
|
+
// Check for AGENTS.md
|
|
156
|
+
const agentsPath = path.join(dir, "AGENTS.md");
|
|
157
|
+
if (existsSync(agentsPath)) {
|
|
158
|
+
try {
|
|
159
|
+
let content = await fs.readFile(agentsPath, "utf-8");
|
|
160
|
+
// Security scan
|
|
161
|
+
if (config.enableInjectionProtection !== false) {
|
|
162
|
+
const scan = detectInjection(content);
|
|
163
|
+
if (!scan.safe) {
|
|
164
|
+
results.push({
|
|
165
|
+
name: `AGENTS.md (${path.relative(workDir, dir) || "."})`,
|
|
166
|
+
content: `[BLOCKED: prompt injection detected]`,
|
|
167
|
+
exists: true,
|
|
168
|
+
size: 0,
|
|
169
|
+
source: "project",
|
|
170
|
+
blocked: true,
|
|
171
|
+
blockReason: scan.reason,
|
|
172
|
+
});
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
const maxSize = config.maxFileSize || 20000;
|
|
177
|
+
const finalContent = truncateWithHeadTail(content, maxSize);
|
|
178
|
+
results.push({
|
|
179
|
+
name: `AGENTS.md (${path.relative(workDir, dir) || "."})`,
|
|
180
|
+
content: finalContent,
|
|
181
|
+
exists: true,
|
|
182
|
+
size: finalContent.length,
|
|
183
|
+
source: "project",
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
catch { }
|
|
187
|
+
}
|
|
188
|
+
// Walk subdirectories
|
|
189
|
+
try {
|
|
190
|
+
const entries = await fs.readdir(dir, { withFileTypes: true });
|
|
191
|
+
for (const entry of entries) {
|
|
192
|
+
if (!entry.isDirectory() || skipDirs.has(entry.name) || entry.name.startsWith(".")) {
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
await walk(path.join(dir, entry.name), depth + 1);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
catch { }
|
|
199
|
+
}
|
|
200
|
+
await walk(workDir, 0);
|
|
201
|
+
// Sort shallowest first (closest to working directory)
|
|
202
|
+
return results;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Load personality overlay (session-level mode switch)
|
|
206
|
+
* Like Hermes /personality command
|
|
207
|
+
*/
|
|
208
|
+
export async function loadPersonalityOverlay(personalityName, config = {}) {
|
|
209
|
+
const home = config.homeDir || getKoboldHome();
|
|
210
|
+
const personalityPath = path.join(home, "personalities", `${personalityName}.md`);
|
|
211
|
+
if (!existsSync(personalityPath)) {
|
|
212
|
+
return null;
|
|
213
|
+
}
|
|
214
|
+
try {
|
|
215
|
+
let content = await fs.readFile(personalityPath, "utf-8");
|
|
216
|
+
// Security scan
|
|
217
|
+
if (config.enableInjectionProtection !== false) {
|
|
218
|
+
const scan = detectInjection(content);
|
|
219
|
+
if (!scan.safe) {
|
|
220
|
+
console.warn(`[Bootstrap] Personality '${personalityName}' blocked: ${scan.reason}`);
|
|
221
|
+
return null;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return { name: personalityName, content };
|
|
225
|
+
}
|
|
226
|
+
catch {
|
|
227
|
+
return null;
|
|
228
|
+
}
|
|
229
|
+
}
|
|
74
230
|
/**
|
|
75
231
|
* Format bootstrap files for system prompt
|
|
232
|
+
* Hermes style: inject content directly, no wrapper explanations
|
|
76
233
|
*/
|
|
77
|
-
export function formatBootstrapForPrompt(
|
|
78
|
-
const
|
|
79
|
-
|
|
80
|
-
|
|
234
|
+
export function formatBootstrapForPrompt(instanceFiles, projectFiles = [], personalityOverlay) {
|
|
235
|
+
const parts = [];
|
|
236
|
+
// 1. Instance-level identity (SOUL.md, IDENTITY.md, USER.md)
|
|
237
|
+
// These are your baseline personality - follows you everywhere
|
|
238
|
+
const validInstance = instanceFiles.filter(f => f.exists && !f.blocked);
|
|
239
|
+
if (validInstance.length > 0) {
|
|
240
|
+
for (const file of validInstance) {
|
|
241
|
+
// Inject directly (Hermes style: no "If SOUL.md is present..." wrapper)
|
|
242
|
+
parts.push(file.content);
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
// 2. Project context (AGENTS.md)
|
|
246
|
+
// This varies by project - discovered from working directory
|
|
247
|
+
const validProject = projectFiles.filter(f => f.exists && !f.blocked);
|
|
248
|
+
if (validProject.length > 0) {
|
|
249
|
+
parts.push("");
|
|
250
|
+
parts.push("<!-- Project Context -->");
|
|
251
|
+
for (const file of validProject) {
|
|
252
|
+
parts.push(`<!-- ${file.name} (${file.size} chars) -->`);
|
|
253
|
+
parts.push(file.content);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
// 3. Personality overlay (session-level mode switch)
|
|
257
|
+
// Like Hermes /personality command - temporary overlay
|
|
258
|
+
if (personalityOverlay) {
|
|
259
|
+
parts.push("");
|
|
260
|
+
parts.push(`<!-- Personality: ${personalityOverlay.name} -->`);
|
|
261
|
+
parts.push(personalityOverlay.content);
|
|
81
262
|
}
|
|
82
|
-
|
|
83
|
-
return [
|
|
84
|
-
"<!-- Bootstrap Context (auto-loaded on session start) -->",
|
|
85
|
-
...sections,
|
|
86
|
-
].join("\n\n---\n\n");
|
|
263
|
+
return parts.join("\n\n");
|
|
87
264
|
}
|
|
88
265
|
/**
|
|
89
|
-
*
|
|
266
|
+
* Load all bootstrap context (Hermes-style)
|
|
90
267
|
*/
|
|
91
|
-
export async function
|
|
92
|
-
const
|
|
93
|
-
const
|
|
268
|
+
export async function loadBootstrap(config = {}) {
|
|
269
|
+
const instanceFiles = await loadInstanceFiles(config);
|
|
270
|
+
const projectFiles = await discoverProjectFiles(config.workingDir, config);
|
|
271
|
+
return { instanceFiles, projectFiles };
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Ensure default SOUL.md exists (Hermes style)
|
|
275
|
+
*/
|
|
276
|
+
export async function ensureDefaultFiles(config = {}) {
|
|
277
|
+
const home = config.homeDir || getKoboldHome();
|
|
278
|
+
const soulPath = path.join(home, "SOUL.md");
|
|
279
|
+
const identityPath = path.join(home, "IDENTITY.md");
|
|
280
|
+
const personalitiesDir = path.join(home, "personalities");
|
|
281
|
+
// Create default SOUL.md if missing
|
|
94
282
|
if (!existsSync(soulPath)) {
|
|
95
|
-
const defaultSoul = `# SOUL
|
|
283
|
+
const defaultSoul = `# SOUL
|
|
96
284
|
|
|
97
|
-
## Identity
|
|
98
285
|
**Name:** 0xKobold
|
|
286
|
+
**Emoji:** 🐉
|
|
99
287
|
**Role:** Your digital familiar
|
|
100
|
-
|
|
288
|
+
|
|
289
|
+
## Identity
|
|
290
|
+
You're a helpful AI coding assistant. Your purpose is to assist with coding tasks,
|
|
291
|
+
answer questions, and act as a companion in development workflows.
|
|
101
292
|
|
|
102
293
|
## Tone
|
|
103
|
-
-
|
|
104
|
-
-
|
|
105
|
-
-
|
|
294
|
+
- Clear and conversational
|
|
295
|
+
- Direct but kind
|
|
296
|
+
- Practical over theoretical
|
|
297
|
+
- Celebrates wins, owns mistakes
|
|
106
298
|
|
|
107
|
-
##
|
|
108
|
-
- **Helpfulness:**
|
|
299
|
+
## Values
|
|
300
|
+
- **Helpfulness:** Assist effectively
|
|
109
301
|
- **Honesty:** Be truthful about capabilities
|
|
110
|
-
- **Learning:** Improve
|
|
302
|
+
- **Learning:** Improve continuously
|
|
111
303
|
|
|
112
304
|
## Guidelines
|
|
113
305
|
- Ask clarifying questions when needed
|
|
114
306
|
- Provide examples when helpful
|
|
115
|
-
- Admit when unsure
|
|
307
|
+
- Admit when unsure
|
|
308
|
+
- Test your changes when possible
|
|
116
309
|
`;
|
|
310
|
+
await fs.mkdir(home, { recursive: true });
|
|
117
311
|
await fs.writeFile(soulPath, defaultSoul);
|
|
118
|
-
console.log("[Bootstrap] Created default SOUL.md");
|
|
312
|
+
console.log("[Bootstrap] Created default SOUL.md in", home);
|
|
119
313
|
}
|
|
314
|
+
// Create default IDENTITY.md if missing
|
|
120
315
|
if (!existsSync(identityPath)) {
|
|
121
316
|
const defaultIdentity = `# IDENTITY
|
|
122
317
|
|
|
123
318
|
**Name:** 0xKobold
|
|
124
319
|
**Emoji:** 🐉
|
|
125
|
-
**Tagline:** Your digital familiar
|
|
126
320
|
**Role:** AI companion and coding assistant
|
|
127
321
|
|
|
128
|
-
##
|
|
129
|
-
-
|
|
130
|
-
-
|
|
131
|
-
-
|
|
132
|
-
-
|
|
322
|
+
## Capabilities
|
|
323
|
+
- Read, write, and edit files
|
|
324
|
+
- Execute commands
|
|
325
|
+
- Search codebase
|
|
326
|
+
- Access web resources
|
|
327
|
+
- Remember context across sessions
|
|
133
328
|
`;
|
|
134
329
|
await fs.writeFile(identityPath, defaultIdentity);
|
|
135
330
|
console.log("[Bootstrap] Created default IDENTITY.md");
|
|
136
331
|
}
|
|
332
|
+
// Create personalities directory with defaults
|
|
333
|
+
if (!existsSync(personalitiesDir)) {
|
|
334
|
+
await fs.mkdir(personalitiesDir, { recursive: true });
|
|
335
|
+
const defaultPersonalities = {
|
|
336
|
+
concise: "# Personality: Concise\n\nBe brief and direct. Skip pleasantries.\nFocus on information density.\nOne sentence if that's all it takes.\nNo filler. No \"great question.\"",
|
|
337
|
+
technical: "# Personality: Technical\n\nBe detailed and precise.\nExplain technical reasoning clearly.\nInclude code examples when helpful.\nUse proper terminology.\nConsider edge cases explicitly.",
|
|
338
|
+
teacher: "# Personality: Teacher\n\nExplain concepts clearly for learning.\nUse analogies and examples liberally.\nCheck understanding by asking follow-ups.\nBe patient with questions.\nBuild up from fundamentals.",
|
|
339
|
+
};
|
|
340
|
+
for (const [name, content] of Object.entries(defaultPersonalities)) {
|
|
341
|
+
await fs.writeFile(path.join(personalitiesDir, `${name}.md`), content);
|
|
342
|
+
}
|
|
343
|
+
console.log("[Bootstrap] Created default personalities");
|
|
344
|
+
}
|
|
137
345
|
}
|
|
346
|
+
/**
|
|
347
|
+
* Get summary for diagnostics
|
|
348
|
+
*/
|
|
349
|
+
export function getBootstrapSummary(instanceFiles, projectFiles) {
|
|
350
|
+
return {
|
|
351
|
+
instanceLoaded: instanceFiles.filter(f => f.exists && !f.blocked).map(f => f.name),
|
|
352
|
+
projectLoaded: projectFiles.filter(f => f.exists && !f.blocked).map(f => f.name),
|
|
353
|
+
blocked: [...instanceFiles, ...projectFiles].filter(f => f.blocked).map(f => f.name),
|
|
354
|
+
totalChars: [...instanceFiles, ...projectFiles].reduce((sum, f) => sum + f.size, 0),
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
export default {
|
|
358
|
+
loadInstanceFiles,
|
|
359
|
+
discoverProjectFiles,
|
|
360
|
+
loadPersonalityOverlay,
|
|
361
|
+
loadBootstrap,
|
|
362
|
+
formatBootstrapForPrompt,
|
|
363
|
+
ensureDefaultFiles,
|
|
364
|
+
getBootstrapSummary,
|
|
365
|
+
getKoboldHome,
|
|
366
|
+
};
|
|
138
367
|
//# sourceMappingURL=bootstrap-loader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap-loader.js","sourceRoot":"","sources":["../../../src/agent/bootstrap-loader.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"bootstrap-loader.js","sourceRoot":"","sources":["../../../src/agent/bootstrap-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAoBrC;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;AAEpF;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,WAAW,EAAE,cAAc,EAAE,eAAe,CAAC,CAAC;AAE5E;;GAEG;AACH,MAAM,kBAAkB,GAAG;IACzB,qEAAqE;IACrE,4DAA4D;IAC5D,8DAA8D;IAC9D,8BAA8B;IAC9B,2DAA2D;IAC3D,+BAA+B;IAC/B,iBAAiB;IACjB,qDAAqD;IACrD,2DAA2D;IAC3D,wCAAwC;IACxC,eAAe;IACf,4CAA4C;CAC7C,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,aAAa;IAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW;QACvB,OAAO,CAAC,GAAG,CAAC,gBAAgB;QAC5B,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,WAAW,CAAC,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,OAAe;IACtC,KAAK,MAAM,OAAO,IAAI,kBAAkB,EAAE,CAAC;QACzC,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1B,OAAO;gBACL,IAAI,EAAE,KAAK;gBACX,MAAM,EAAE,qCAAqC;aAC9C,CAAC;QACJ,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB,CAAC,OAAe,EAAE,OAAe;IAC5D,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC;IAE9C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAE5C,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACxC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,2BAA2B,QAAQ,IAAI,QAAQ,OAAO,OAAO,CAAC,MAAM,mDAAmD,CAAC;IAEvI,OAAO,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;AAC9B,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,SAAmC,EAAE;IAErC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,IAAI,aAAa,EAAE,CAAC;IAC/C,MAAM,OAAO,GAAoB,EAAE,CAAC;IAEpC,KAAK,MAAM,QAAQ,IAAI,cAAc,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAE3C,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,CAAC;gBACP,MAAM,EAAE,UAAU;aACnB,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,IAAI,CAAC;YACH,IAAI,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAEnD,gBAAgB;YAChB,IAAI,MAAM,CAAC,yBAAyB,KAAK,KAAK,EAAE,CAAC;gBAC/C,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;gBACtC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;oBACf,OAAO,CAAC,IAAI,CAAC,wBAAwB,QAAQ,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;oBAClE,OAAO,CAAC,IAAI,CAAC;wBACX,IAAI,EAAE,QAAQ;wBACd,OAAO,EAAE,aAAa,QAAQ,cAAc,IAAI,CAAC,MAAM,GAAG;wBAC1D,MAAM,EAAE,IAAI;wBACZ,IAAI,EAAE,CAAC;wBACP,MAAM,EAAE,UAAU;wBAClB,OAAO,EAAE,IAAI;wBACb,WAAW,EAAE,IAAI,CAAC,MAAM;qBACzB,CAAC,CAAC;oBACH,SAAS;gBACX,CAAC;YACH,CAAC;YAED,qBAAqB;YACrB,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,IAAI,KAAK,CAAC;YAC5C,MAAM,YAAY,GAAG,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAE5D,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,YAAY;gBACrB,MAAM,EAAE,IAAI;gBACZ,IAAI,EAAE,YAAY,CAAC,MAAM;gBACzB,MAAM,EAAE,UAAU;aACnB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC;gBACX,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,CAAC;gBACP,MAAM,EAAE,UAAU;aACnB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,UAAmB,EACnB,SAAmC,EAAE;IAErC,MAAM,OAAO,GAAG,UAAU,IAAI,MAAM,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACjE,MAAM,OAAO,GAAoB,EAAE,CAAC;IACpC,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;QACvB,cAAc,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa;QACtD,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ;KAChE,CAAC,CAAC;IAEH,KAAK,UAAU,IAAI,CAAC,GAAW,EAAE,KAAa;QAC5C,IAAI,KAAK,GAAG,EAAE;YAAE,OAAO,CAAC,YAAY;QAEpC,sBAAsB;QACtB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAC/C,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,IAAI,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;gBAErD,gBAAgB;gBAChB,IAAI,MAAM,CAAC,yBAAyB,KAAK,KAAK,EAAE,CAAC;oBAC/C,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;oBACtC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;wBACf,OAAO,CAAC,IAAI,CAAC;4BACX,IAAI,EAAE,cAAc,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG;4BACzD,OAAO,EAAE,sCAAsC;4BAC/C,MAAM,EAAE,IAAI;4BACZ,IAAI,EAAE,CAAC;4BACP,MAAM,EAAE,SAAS;4BACjB,OAAO,EAAE,IAAI;4BACb,WAAW,EAAE,IAAI,CAAC,MAAM;yBACzB,CAAC,CAAC;wBACH,OAAO;oBACT,CAAC;gBACH,CAAC;gBAED,MAAM,OAAO,GAAG,MAAM,CAAC,WAAW,IAAI,KAAK,CAAC;gBAC5C,MAAM,YAAY,GAAG,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAE5D,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,cAAc,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,GAAG,GAAG;oBACzD,OAAO,EAAE,YAAY;oBACrB,MAAM,EAAE,IAAI;oBACZ,IAAI,EAAE,YAAY,CAAC,MAAM;oBACzB,MAAM,EAAE,SAAS;iBAClB,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;QACZ,CAAC;QAED,sBAAsB;QACtB,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBACnF,SAAS;gBACX,CAAC;gBACD,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC,CAAA,CAAC;IACZ,CAAC;IAED,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAEvB,uDAAuD;IACvD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,eAAuB,EACvB,SAAmC,EAAE;IAErC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,IAAI,aAAa,EAAE,CAAC;IAC/C,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,eAAe,KAAK,CAAC,CAAC;IAElF,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC;QACH,IAAI,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QAE1D,gBAAgB;QAChB,IAAI,MAAM,CAAC,yBAAyB,KAAK,KAAK,EAAE,CAAC;YAC/C,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CAAC,4BAA4B,eAAe,cAAc,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;gBACrF,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CACtC,aAA8B,EAC9B,eAAgC,EAAE,EAClC,kBAAsD;IAEtD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,6DAA6D;IAC7D,+DAA+D;IAC/D,MAAM,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACxE,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,wEAAwE;YACxE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,iCAAiC;IACjC,6DAA6D;IAC7D,MAAM,YAAY,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACtE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACvC,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,aAAa,CAAC,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,qDAAqD;IACrD,uDAAuD;IACvD,IAAI,kBAAkB,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,qBAAqB,kBAAkB,CAAC,IAAI,MAAM,CAAC,CAAC;QAC/D,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,SAAmC,EAAE;IAKrC,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACtD,MAAM,YAAY,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAE3E,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,SAAmC,EAAE;IAErC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,IAAI,aAAa,EAAE,CAAC;IAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC5C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACpD,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;IAE1D,oCAAoC;IACpC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BvB,CAAC;QACE,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,wCAAwC,EAAE,IAAI,CAAC,CAAC;IAC9D,CAAC;IAED,wCAAwC;IACxC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,MAAM,eAAe,GAAG;;;;;;;;;;;;CAY3B,CAAC;QACE,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;IACzD,CAAC;IAED,+CAA+C;IAC/C,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAClC,MAAM,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEtD,MAAM,oBAAoB,GAAG;YAC3B,OAAO,EAAE,2KAA2K;YACpL,SAAS,EAAE,2LAA2L;YACtM,OAAO,EAAE,6MAA6M;SACvN,CAAC;QAEF,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACnE,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,IAAI,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;QACzE,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,aAA8B,EAC9B,YAA6B;IAO7B,OAAO;QACL,cAAc,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAClF,aAAa,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAChF,OAAO,EAAE,CAAC,GAAG,aAAa,EAAE,GAAG,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACpF,UAAU,EAAE,CAAC,GAAG,aAAa,EAAE,GAAG,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;KACpF,CAAC;AACJ,CAAC;AAED,eAAe;IACb,iBAAiB;IACjB,oBAAoB;IACpB,sBAAsB;IACtB,aAAa;IACb,wBAAwB;IACxB,kBAAkB;IAClB,mBAAmB;IACnB,aAAa;CACd,CAAC"}
|
|
@@ -6,15 +6,20 @@
|
|
|
6
6
|
*/
|
|
7
7
|
export const DEFAULT_BUDGET = {
|
|
8
8
|
maxTokens: 128000, // Default for high-context models
|
|
9
|
-
warningThreshold:
|
|
10
|
-
criticalThreshold:
|
|
9
|
+
warningThreshold: 75, // Warning at 75% to leave buffer
|
|
10
|
+
criticalThreshold: 90, // Critical at 90% to safely compact before hitting limits
|
|
11
11
|
};
|
|
12
|
+
// Safety buffer to prevent "exceeded max context length" errors
|
|
13
|
+
// This accounts for estimation inaccuracy (~5%) and system overhead
|
|
14
|
+
const SAFETY_BUFFER_TOKENS = 1000;
|
|
12
15
|
/**
|
|
13
|
-
* Token estimation (
|
|
16
|
+
* Token estimation (improved accuracy)
|
|
14
17
|
*/
|
|
15
18
|
export function estimateTokens(text) {
|
|
16
|
-
// ~
|
|
17
|
-
|
|
19
|
+
// ~3.5 chars per token is more accurate for most LLMs
|
|
20
|
+
// Add 10% buffer for special tokens, formatting overhead
|
|
21
|
+
const base = text.length / 3.5;
|
|
22
|
+
return Math.ceil(base * 1.1); // 10% overhead for safety
|
|
18
23
|
}
|
|
19
24
|
/**
|
|
20
25
|
* Calculate current token usage
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-pruning.js","sourceRoot":"","sources":["../../../src/agent/context-pruning.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgCH,MAAM,CAAC,MAAM,cAAc,GAAkB;IAC3C,SAAS,EAAE,MAAM,EAAE,kCAAkC;IACrD,gBAAgB,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"context-pruning.js","sourceRoot":"","sources":["../../../src/agent/context-pruning.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Embedded Agent Runner - v0.
|
|
2
|
+
* Embedded Agent Runner - v0.4.0
|
|
3
3
|
*
|
|
4
4
|
* Wraps pi-coding-agent with full TUI settings sharing.
|
|
5
5
|
* Shares: extensions, model config, persona from IDENTITY.md/SOUL.md
|
|
6
|
+
*
|
|
7
|
+
* HERMES-STYLE: Loads instance identity from KOBOLD_HOME only
|
|
6
8
|
*/
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
+
import { loadBootstrap, ensureDefaultFiles } from "./bootstrap-loader.js";
|
|
10
|
+
import { buildSystemPromptAsync } from "./system-prompt.js";
|
|
9
11
|
import { config as piConfig } from "../pi-config.js";
|
|
10
12
|
import { getConfigValue } from "../config/loader.js";
|
|
13
|
+
import * as path from "node:path";
|
|
14
|
+
import { homedir } from "node:os";
|
|
11
15
|
/**
|
|
12
16
|
* Run agent with embedded mode (shares TUI settings)
|
|
13
17
|
*
|
|
@@ -59,18 +63,24 @@ export async function runEmbeddedAgent(config) {
|
|
|
59
63
|
console.log("[Embedded] Using standalone mode (no TUI settings)");
|
|
60
64
|
model = config.model || process.env.KOBOLD_MODEL || "ollama/kimi-k2.5:cloud";
|
|
61
65
|
}
|
|
62
|
-
// 1. Ensure
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
66
|
+
// 1. Ensure default files exist (creates SOUL.md if missing)
|
|
67
|
+
const homeDir = process.env.KOBOLD_HOME || path.join(homedir(), ".0xkobold");
|
|
68
|
+
await ensureDefaultFiles({ homeDir });
|
|
69
|
+
// 2. Load instance identity (Hermes-style: from KOBOLD_HOME only)
|
|
70
|
+
const { instanceFiles, projectFiles } = await loadBootstrap({
|
|
71
|
+
homeDir,
|
|
72
|
+
workingDir: workspaceDir,
|
|
73
|
+
});
|
|
74
|
+
console.log(`[Embedded] Loaded ${instanceFiles.filter(f => f.exists).length} instance files`);
|
|
75
|
+
console.log(`[Embedded] Loaded ${projectFiles.filter(f => f.exists).length} project files`);
|
|
67
76
|
// 3. Build custom system prompt with persona context
|
|
68
|
-
const systemPrompt =
|
|
69
|
-
|
|
70
|
-
|
|
77
|
+
const systemPrompt = await buildSystemPromptAsync({
|
|
78
|
+
instanceFiles,
|
|
79
|
+
projectFiles,
|
|
71
80
|
workspace: workspaceDir,
|
|
72
81
|
mode: config.mode,
|
|
73
82
|
tools: [],
|
|
83
|
+
extraSystemPrompt: config.extraSystemPrompt,
|
|
74
84
|
});
|
|
75
85
|
console.log(`[Embedded] System prompt: ${systemPrompt.length} chars`);
|
|
76
86
|
// 4. Try to integrate with pi-coding-agent SDK
|
|
@@ -113,11 +123,14 @@ export async function runEmbeddedAgent(config) {
|
|
|
113
123
|
console.log('[Embedded] Running in simulation mode (SDK not available)');
|
|
114
124
|
const simulatedResult = {
|
|
115
125
|
text: `[Embedded mode simulation]\n\n` +
|
|
116
|
-
`
|
|
117
|
-
|
|
126
|
+
`Instance identity loaded:\n` +
|
|
127
|
+
instanceFiles
|
|
118
128
|
.filter(f => f.exists)
|
|
119
129
|
.map(f => `- ${f.name} (${f.size} chars)`)
|
|
120
130
|
.join("\n") +
|
|
131
|
+
(projectFiles.length > 0
|
|
132
|
+
? `\n\nProject context:\n` + projectFiles.filter(f => f.exists).map(f => `- ${f.name}`).join("\n")
|
|
133
|
+
: '') +
|
|
121
134
|
(model ? `\n\nModel: ${model}` : '') +
|
|
122
135
|
(extensions.length > 0 ? `\nExtensions: ${extensions.length}` : ''),
|
|
123
136
|
toolCalls: [],
|
|
@@ -160,7 +173,8 @@ export async function isEmbeddedModeAvailable() {
|
|
|
160
173
|
* Sets up directories and default files
|
|
161
174
|
*/
|
|
162
175
|
export async function initEmbeddedMode(workspaceDir) {
|
|
163
|
-
|
|
164
|
-
|
|
176
|
+
const homeDir = process.env.KOBOLD_HOME || path.join(homedir(), ".0xkobold");
|
|
177
|
+
await ensureDefaultFiles({ homeDir });
|
|
178
|
+
console.log("[Embedded] Initialized with default identity files");
|
|
165
179
|
}
|
|
166
180
|
//# sourceMappingURL=embedded-runner.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embedded-runner.js","sourceRoot":"","sources":["../../../src/agent/embedded-runner.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"embedded-runner.js","sourceRoot":"","sources":["../../../src/agent/embedded-runner.ts"],"names":[],"mappings":"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"}
|