@oyasmi/pipiclaw 0.4.0 → 0.5.1

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 (73) hide show
  1. package/README.md +43 -5
  2. package/dist/agent.d.ts.map +1 -1
  3. package/dist/agent.js +156 -57
  4. package/dist/agent.js.map +1 -1
  5. package/dist/context.d.ts +18 -0
  6. package/dist/context.d.ts.map +1 -1
  7. package/dist/context.js +26 -0
  8. package/dist/context.js.map +1 -1
  9. package/dist/index.d.ts +7 -3
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +6 -2
  12. package/dist/index.js.map +1 -1
  13. package/dist/llm-json.d.ts +7 -0
  14. package/dist/llm-json.d.ts.map +1 -0
  15. package/dist/llm-json.js +77 -0
  16. package/dist/llm-json.js.map +1 -0
  17. package/dist/markdown-sections.d.ts +6 -0
  18. package/dist/markdown-sections.d.ts.map +1 -0
  19. package/dist/markdown-sections.js +34 -0
  20. package/dist/markdown-sections.js.map +1 -0
  21. package/dist/memory-candidates.d.ts +21 -0
  22. package/dist/memory-candidates.d.ts.map +1 -0
  23. package/dist/memory-candidates.js +126 -0
  24. package/dist/memory-candidates.js.map +1 -0
  25. package/dist/memory-consolidation.d.ts.map +1 -1
  26. package/dist/memory-consolidation.js +28 -49
  27. package/dist/memory-consolidation.js.map +1 -1
  28. package/dist/memory-files.d.ts +3 -0
  29. package/dist/memory-files.d.ts.map +1 -1
  30. package/dist/memory-files.js +51 -0
  31. package/dist/memory-files.js.map +1 -1
  32. package/dist/memory-lifecycle.d.ts +9 -0
  33. package/dist/memory-lifecycle.d.ts.map +1 -1
  34. package/dist/memory-lifecycle.js +66 -0
  35. package/dist/memory-lifecycle.js.map +1 -1
  36. package/dist/memory-recall.d.ts +29 -0
  37. package/dist/memory-recall.d.ts.map +1 -0
  38. package/dist/memory-recall.js +218 -0
  39. package/dist/memory-recall.js.map +1 -0
  40. package/dist/prompt-builder.d.ts.map +1 -1
  41. package/dist/prompt-builder.js +7 -2
  42. package/dist/prompt-builder.js.map +1 -1
  43. package/dist/session-memory-files.d.ts +2 -0
  44. package/dist/session-memory-files.d.ts.map +1 -0
  45. package/dist/session-memory-files.js +2 -0
  46. package/dist/session-memory-files.js.map +1 -0
  47. package/dist/session-memory.d.ts +22 -0
  48. package/dist/session-memory.d.ts.map +1 -0
  49. package/dist/session-memory.js +274 -0
  50. package/dist/session-memory.js.map +1 -0
  51. package/dist/sidecar-worker.d.ts +27 -0
  52. package/dist/sidecar-worker.d.ts.map +1 -0
  53. package/dist/sidecar-worker.js +105 -0
  54. package/dist/sidecar-worker.js.map +1 -0
  55. package/dist/sub-agents.d.ts +10 -0
  56. package/dist/sub-agents.d.ts.map +1 -1
  57. package/dist/sub-agents.js +90 -0
  58. package/dist/sub-agents.js.map +1 -1
  59. package/dist/tools/index.d.ts +3 -0
  60. package/dist/tools/index.d.ts.map +1 -1
  61. package/dist/tools/index.js +2 -0
  62. package/dist/tools/index.js.map +1 -1
  63. package/dist/tools/subagent.d.ts +6 -0
  64. package/dist/tools/subagent.d.ts.map +1 -1
  65. package/dist/tools/subagent.js +127 -12
  66. package/dist/tools/subagent.js.map +1 -1
  67. package/docs/improve-memory/design.md +537 -0
  68. package/docs/improve-memory/interfaces-and-tests.md +473 -0
  69. package/docs/improve-memory/spec.md +357 -0
  70. package/docs/memory-rfc.md +7 -1
  71. package/docs/proj-review.md +188 -0
  72. package/docs/test-supplementation-plan.md +553 -0
  73. package/package.json +3 -1
package/dist/agent.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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","sourcesContent":["import { Agent } from \"@mariozechner/pi-agent-core\";\nimport type { Api, Model } from \"@mariozechner/pi-ai\";\nimport {\n\tAgentSession,\n\tAuthStorage,\n\tconvertToLlm,\n\tDefaultResourceLoader,\n\tModelRegistry,\n\tSessionManager,\n\ttype Skill,\n} from \"@mariozechner/pi-coding-agent\";\nimport { mkdir, writeFile } from \"fs/promises\";\nimport { dirname, join, resolve } from \"path\";\nimport { COMMAND_RESULT_CUSTOM_TYPE, createCommandExtension } from \"./command-extension.js\";\nimport { type BuiltInCommand, renderBuiltInHelp } from \"./commands.js\";\nimport { getAgentConfig, getApiKeyForModel, getSoul, loadPipiclawSkills } from \"./config-loader.js\";\nimport { PipiclawSettingsManager } from \"./context.js\";\nimport type { DingTalkContext } from \"./dingtalk.js\";\nimport * as log from \"./log.js\";\nimport { MemoryLifecycle } from \"./memory-lifecycle.js\";\nimport { resolveInitialModel } from \"./model-utils.js\";\nimport { APP_HOME_DIR, AUTH_CONFIG_PATH, MODELS_CONFIG_PATH } from \"./paths.js\";\nimport { buildAppendSystemPrompt } from \"./prompt-builder.js\";\nimport { createExecutor, type SandboxConfig } from \"./sandbox.js\";\nimport type { ChannelStore } from \"./store.js\";\nimport { discoverSubAgents, formatSubAgentList, type SubAgentDiscoveryResult } from \"./sub-agents.js\";\nimport { createPipiclawTools } from \"./tools/index.js\";\nimport type { SubAgentToolDetails } from \"./tools/subagent.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface AgentRunner {\n\trun(ctx: DingTalkContext, store: ChannelStore): Promise<{ stopReason: string; errorMessage?: string }>;\n\thandleBuiltinCommand(ctx: DingTalkContext, command: BuiltInCommand): Promise<void>;\n\tqueueSteer(text: string, userName?: string): Promise<void>;\n\tqueueFollowUp(text: string, userName?: string): Promise<void>;\n\tabort(): Promise<void>;\n}\n\ntype FinalOutcome = { kind: \"none\" } | { kind: \"silent\" } | { kind: \"final\"; text: string };\ntype ModelRegistryClass = {\n\tcreate?: (authStorage: AuthStorage, modelsJsonPath?: string) => ModelRegistry;\n\tnew (authStorage: AuthStorage, modelsJsonPath?: string): ModelRegistry;\n};\n\nfunction isSilentOutcome(outcome: FinalOutcome): outcome is { kind: \"silent\" } {\n\treturn outcome.kind === \"silent\";\n}\n\nfunction isFinalOutcome(outcome: FinalOutcome): outcome is { kind: \"final\"; text: string } {\n\treturn outcome.kind === \"final\";\n}\n\nfunction getFinalOutcomeText(outcome: FinalOutcome): string | null {\n\treturn isFinalOutcome(outcome) ? outcome.text : null;\n}\n\nfunction createModelRegistry(authStorage: AuthStorage, modelsJsonPath: string): ModelRegistry {\n\tconst registryClass = ModelRegistry as unknown as ModelRegistryClass;\n\treturn typeof registryClass.create === \"function\"\n\t\t? registryClass.create(authStorage, modelsJsonPath)\n\t\t: new registryClass(authStorage, modelsJsonPath);\n}\n\n// ============================================================================\n// Text helpers\n// ============================================================================\n\nfunction truncate(text: string, maxLen: number): string {\n\tif (text.length <= maxLen) return text;\n\treturn `${text.substring(0, maxLen - 3)}...`;\n}\n\nfunction sanitizeProgressText(text: string): string {\n\treturn text\n\t\t.replace(/\\uFFFC/g, \"\")\n\t\t.replace(/\\r/g, \"\")\n\t\t.trim();\n}\n\nfunction formatProgressEntry(kind: \"tool\" | \"thinking\" | \"error\" | \"assistant\", text: string): string {\n\tconst cleaned = sanitizeProgressText(text);\n\tif (!cleaned) return \"\";\n\n\tconst normalized = cleaned.replace(/\\n+/g, \" \").trim();\n\tswitch (kind) {\n\t\tcase \"tool\":\n\t\t\treturn `Running: ${normalized}`;\n\t\tcase \"thinking\":\n\t\t\treturn `Thinking: ${normalized}`;\n\t\tcase \"error\":\n\t\t\treturn `Error: ${normalized}`;\n\t\tcase \"assistant\":\n\t\t\treturn normalized;\n\t}\n}\n\nfunction extractToolResultText(result: unknown): string {\n\tif (typeof result === \"string\") {\n\t\treturn result;\n\t}\n\n\tif (\n\t\tresult &&\n\t\ttypeof result === \"object\" &&\n\t\t\"content\" in result &&\n\t\tArray.isArray((result as { content: unknown }).content)\n\t) {\n\t\tconst content = (result as { content: Array<{ type: string; text?: string }> }).content;\n\t\tconst textParts: string[] = [];\n\t\tfor (const part of content) {\n\t\t\tif (part.type === \"text\" && part.text) {\n\t\t\t\ttextParts.push(part.text);\n\t\t\t}\n\t\t}\n\t\tif (textParts.length > 0) {\n\t\t\treturn textParts.join(\"\\n\");\n\t\t}\n\t}\n\n\treturn JSON.stringify(result);\n}\n\nfunction isSubAgentToolDetails(value: unknown): value is SubAgentToolDetails {\n\tif (!value || typeof value !== \"object\" || !(\"kind\" in value) || (value as { kind?: unknown }).kind !== \"subagent\") {\n\t\treturn false;\n\t}\n\n\tif (!(\"usage\" in value)) {\n\t\treturn false;\n\t}\n\n\tconst usage = (value as { usage?: unknown }).usage;\n\treturn (\n\t\t!!usage &&\n\t\ttypeof usage === \"object\" &&\n\t\t\"input\" in usage &&\n\t\t\"output\" in usage &&\n\t\t\"cacheRead\" in usage &&\n\t\t\"cacheWrite\" in usage &&\n\t\t\"cost\" in usage\n\t);\n}\n\nfunction mergeSubAgentUsage(totalUsage: UsageTotals, details: SubAgentToolDetails): void {\n\ttotalUsage.input += details.usage.input;\n\ttotalUsage.output += details.usage.output;\n\ttotalUsage.cacheRead += details.usage.cacheRead;\n\ttotalUsage.cacheWrite += details.usage.cacheWrite;\n\ttotalUsage.cost.input += details.usage.cost.input;\n\ttotalUsage.cost.output += details.usage.cost.output;\n\ttotalUsage.cost.cacheRead += details.usage.cost.cacheRead;\n\ttotalUsage.cost.cacheWrite += details.usage.cost.cacheWrite;\n\ttotalUsage.cost.total += details.usage.cost.total;\n}\n\nfunction extractCustomCommandResultText(message: unknown): string | null {\n\tif (\n\t\t!message ||\n\t\ttypeof message !== \"object\" ||\n\t\t!(\"role\" in message) ||\n\t\t!(\"customType\" in message) ||\n\t\t(message as { role?: unknown }).role !== \"custom\" ||\n\t\t(message as { customType?: unknown }).customType !== COMMAND_RESULT_CUSTOM_TYPE\n\t) {\n\t\treturn null;\n\t}\n\n\tconst content = (message as { content?: unknown }).content;\n\treturn typeof content === \"string\" && content.trim() ? content : null;\n}\n\n// ============================================================================\n// Run State\n// ============================================================================\n\ninterface PendingTool {\n\ttoolName: string;\n\targs: unknown;\n\tstartTime: number;\n}\n\ninterface UsageTotals {\n\tinput: number;\n\toutput: number;\n\tcacheRead: number;\n\tcacheWrite: number;\n\tcost: { input: number; output: number; cacheRead: number; cacheWrite: number; total: number };\n}\n\ninterface RunQueue {\n\tenqueue(fn: () => Promise<void>, errorContext: string): void;\n\tenqueueMessage(text: string, target: \"main\" | \"thread\", errorContext: string, doLog?: boolean): void;\n}\n\ninterface RunState {\n\tctx: DingTalkContext | null;\n\tlogCtx: { channelId: string; userName?: string; channelName?: string } | null;\n\tstore: ChannelStore | null;\n\tqueue: RunQueue | null;\n\tpendingTools: Map<string, PendingTool>;\n\ttotalUsage: UsageTotals;\n\tstopReason: string;\n\terrorMessage: string | undefined;\n\tfinalOutcome: FinalOutcome;\n\tfinalResponseDelivered: boolean;\n}\n\nfunction createEmptyRunState(): RunState {\n\treturn {\n\t\tctx: null,\n\t\tlogCtx: null,\n\t\tstore: null,\n\t\tqueue: null,\n\t\tpendingTools: new Map(),\n\t\ttotalUsage: {\n\t\t\tinput: 0,\n\t\t\toutput: 0,\n\t\t\tcacheRead: 0,\n\t\t\tcacheWrite: 0,\n\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t},\n\t\tstopReason: \"stop\",\n\t\terrorMessage: undefined,\n\t\tfinalOutcome: { kind: \"none\" },\n\t\tfinalResponseDelivered: false,\n\t};\n}\n\n// ============================================================================\n// ChannelRunner\n// ============================================================================\n\nclass ChannelRunner implements AgentRunner {\n\t// --- Constructed once ---\n\tprivate readonly sandboxConfig: SandboxConfig;\n\tprivate readonly channelId: string;\n\tprivate readonly channelDir: string;\n\tprivate readonly workspacePath: string;\n\tprivate readonly workspaceDir: string;\n\tprivate readonly session: AgentSession;\n\tprivate readonly agent: Agent;\n\tprivate readonly sessionManager: SessionManager;\n\tprivate readonly settingsManager: PipiclawSettingsManager;\n\tprivate readonly modelRegistry: ModelRegistry;\n\tprivate readonly memoryLifecycle: MemoryLifecycle;\n\tprivate readonly sessionReady: Promise<void>;\n\tprivate subAgentDiscovery: SubAgentDiscoveryResult;\n\n\t// --- Mutable across runs ---\n\tprivate activeModel: Model<Api>;\n\tprivate currentSkills: Skill[];\n\n\t// --- Per run ---\n\tprivate runState: RunState = createEmptyRunState();\n\n\tconstructor(sandboxConfig: SandboxConfig, channelId: string, channelDir: string) {\n\t\tthis.sandboxConfig = sandboxConfig;\n\t\tthis.channelId = channelId;\n\t\tthis.channelDir = channelDir;\n\n\t\tconst executor = createExecutor(sandboxConfig);\n\t\tthis.workspaceDir = resolve(dirname(channelDir));\n\t\tthis.workspacePath = executor.getWorkspacePath(this.workspaceDir);\n\n\t\t// Initial skill summaries\n\t\tconst initialSkills = loadPipiclawSkills(channelDir, this.workspacePath);\n\t\tthis.currentSkills = initialSkills;\n\n\t\t// Create session manager\n\t\tconst contextFile = join(channelDir, \"context.jsonl\");\n\t\tthis.sessionManager = SessionManager.open(contextFile, channelDir);\n\t\tthis.settingsManager = new PipiclawSettingsManager(APP_HOME_DIR);\n\n\t\t// Create AuthStorage and ModelRegistry\n\t\tconst authStorage = AuthStorage.create(AUTH_CONFIG_PATH);\n\t\tthis.modelRegistry = createModelRegistry(authStorage, MODELS_CONFIG_PATH);\n\n\t\t// Resolve model: prefer saved global default, fall back to first available model\n\t\tthis.activeModel = resolveInitialModel(this.modelRegistry, this.settingsManager);\n\t\tlog.logInfo(`Using model: ${this.activeModel.provider}/${this.activeModel.id} (${this.activeModel.name})`);\n\t\tthis.subAgentDiscovery = this.refreshSubAgentDiscovery();\n\n\t\t// Create tools\n\t\tconst tools = createPipiclawTools({\n\t\t\texecutor,\n\t\t\tgetCurrentModel: () => this.activeModel,\n\t\t\tgetAvailableModels: () => this.modelRegistry.getAvailable(),\n\t\t\tresolveApiKey: async (model) => getApiKeyForModel(this.modelRegistry, model),\n\t\t\tworkspaceDir: this.workspaceDir,\n\t\t\tworkspacePath: this.workspacePath,\n\t\t\tchannelId: this.channelId,\n\t\t\tsandboxConfig: this.sandboxConfig,\n\t\t\tgetSubAgentDiscovery: () => this.subAgentDiscovery,\n\t\t});\n\n\t\t// Create agent\n\t\tthis.agent = new Agent({\n\t\t\tinitialState: {\n\t\t\t\tsystemPrompt: \"\",\n\t\t\t\tmodel: this.activeModel,\n\t\t\t\tthinkingLevel: \"off\",\n\t\t\t\ttools,\n\t\t\t},\n\t\t\tconvertToLlm,\n\t\t\tgetApiKey: async () => getApiKeyForModel(this.modelRegistry, this.activeModel),\n\t\t});\n\n\t\tthis.memoryLifecycle = new MemoryLifecycle({\n\t\t\tchannelId: this.channelId,\n\t\t\tchannelDir: this.channelDir,\n\t\t\tgetMessages: () => this.session.messages,\n\t\t\tgetSessionEntries: () => this.sessionManager.getBranch(),\n\t\t\tgetModel: () => this.session.model ?? this.activeModel,\n\t\t\tresolveApiKey: async (model) => getApiKeyForModel(this.modelRegistry, model),\n\t\t});\n\n\t\tconst resourceLoader = new DefaultResourceLoader({\n\t\t\tcwd: process.cwd(),\n\t\t\tagentDir: APP_HOME_DIR,\n\t\t\tsettingsManager: this.settingsManager as any,\n\t\t\textensionFactories: [\n\t\t\t\tthis.memoryLifecycle.createExtensionFactory(),\n\t\t\t\tcreateCommandExtension({\n\t\t\t\t\tgetCurrentModel: () => this.session.model ?? this.activeModel,\n\t\t\t\t\tgetAvailableModels: async () => {\n\t\t\t\t\t\tthis.modelRegistry.refresh();\n\t\t\t\t\t\treturn await this.modelRegistry.getAvailable();\n\t\t\t\t\t},\n\t\t\t\t\tgetSessionStats: () => this.session.getSessionStats(),\n\t\t\t\t\tgetThinkingLevel: () => this.session.thinkingLevel,\n\t\t\t\t\tswitchModel: async (model) => {\n\t\t\t\t\t\tawait this.session.setModel(model);\n\t\t\t\t\t\tthis.activeModel = model;\n\t\t\t\t\t},\n\t\t\t\t\trefreshSessionResources: async () => {\n\t\t\t\t\t\tawait this.refreshSessionResources();\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t],\n\t\t\tappendSystemPromptOverride: (base) => {\n\t\t\t\tconst soul = getSoul(this.workspaceDir);\n\t\t\t\tconst sections = [...base];\n\t\t\t\tif (soul) {\n\t\t\t\t\tsections.unshift(soul);\n\t\t\t\t}\n\t\t\t\tsections.push(\n\t\t\t\t\tbuildAppendSystemPrompt(this.workspacePath, this.channelId, this.sandboxConfig, {\n\t\t\t\t\t\tsubAgentList: formatSubAgentList(this.subAgentDiscovery.agents),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\treturn sections;\n\t\t\t},\n\t\t\tagentsFilesOverride: () => {\n\t\t\t\tconst agentConfig = getAgentConfig(this.channelDir);\n\t\t\t\treturn {\n\t\t\t\t\tagentsFiles: agentConfig ? [{ path: `${this.workspacePath}/AGENTS.md`, content: agentConfig }] : [],\n\t\t\t\t};\n\t\t\t},\n\t\t\tskillsOverride: (base) => ({\n\t\t\t\tskills: [...base.skills, ...this.currentSkills],\n\t\t\t\tdiagnostics: base.diagnostics,\n\t\t\t}),\n\t\t});\n\n\t\tconst baseToolsOverride = Object.fromEntries(tools.map((tool) => [tool.name, tool]));\n\n\t\t// Create AgentSession\n\t\tthis.session = new AgentSession({\n\t\t\tagent: this.agent,\n\t\t\tsessionManager: this.sessionManager,\n\t\t\tsettingsManager: this.settingsManager as any,\n\t\t\tcwd: process.cwd(),\n\t\t\tmodelRegistry: this.modelRegistry,\n\t\t\tresourceLoader,\n\t\t\tbaseToolsOverride,\n\t\t});\n\n\t\t// Subscribe to session events\n\t\tthis.subscribeToSessionEvents();\n\t\tthis.sessionReady = this.initializeSession();\n\t}\n\n\t// === Public API ===\n\n\tasync run(ctx: DingTalkContext, store: ChannelStore): Promise<{ stopReason: string; errorMessage?: string }> {\n\t\tthis.resetRunState(ctx, store);\n\n\t\t// Create queue for this run\n\t\tlet queueChain = Promise.resolve();\n\t\tthis.runState.queue = {\n\t\t\tenqueue: (fn: () => Promise<void>, errorContext: string): void => {\n\t\t\t\tqueueChain = queueChain.then(async () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait fn();\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tconst errMsg = err instanceof Error ? err.message : String(err);\n\t\t\t\t\t\tlog.logWarning(`DingTalk API error (${errorContext})`, errMsg);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\tenqueueMessage: function (text: string, target: \"main\" | \"thread\", errorContext: string, doLog = true): void {\n\t\t\t\tthis.enqueue(\n\t\t\t\t\t() => (target === \"main\" ? ctx.respond(text, doLog) : ctx.respondInThread(text)),\n\t\t\t\t\terrorContext,\n\t\t\t\t);\n\t\t\t},\n\t\t};\n\n\t\ttry {\n\t\t\tawait this.ensureSessionReady();\n\n\t\t\t// Ensure channel directory exists\n\t\t\tawait mkdir(this.channelDir, { recursive: true });\n\n\t\t\tconst userMessage = this.formatUserMessage(ctx.message.text, ctx.message.userName);\n\t\t\tconst promptText = this.shouldPreserveRawInput(ctx.message.text) ? ctx.message.text.trim() : userMessage;\n\n\t\t\t// Debug: write context to last_prompt.json (only with PIPICLAW_DEBUG=1)\n\t\t\tif (process.env.PIPICLAW_DEBUG) {\n\t\t\t\tconst debugContext = {\n\t\t\t\t\tsystemPrompt: this.agent.state.systemPrompt,\n\t\t\t\t\tmessages: this.session.messages,\n\t\t\t\t\tnewUserMessage: promptText,\n\t\t\t\t};\n\t\t\t\tawait writeFile(join(this.channelDir, \"last_prompt.json\"), JSON.stringify(debugContext, null, 2));\n\t\t\t}\n\n\t\t\tawait this.session.prompt(promptText);\n\t\t} catch (err) {\n\t\t\tthis.runState.stopReason = \"error\";\n\t\t\tthis.runState.errorMessage = err instanceof Error ? err.message : String(err);\n\t\t\tlog.logWarning(`[${this.channelId}] Runner failed`, this.runState.errorMessage);\n\t\t} finally {\n\t\t\tawait queueChain;\n\t\t\tconst finalOutcome = this.runState.finalOutcome;\n\t\t\tconst finalOutcomeText = getFinalOutcomeText(finalOutcome);\n\n\t\t\ttry {\n\t\t\t\tif (\n\t\t\t\t\tthis.runState.stopReason === \"error\" &&\n\t\t\t\t\tthis.runState.errorMessage &&\n\t\t\t\t\t!this.runState.finalResponseDelivered\n\t\t\t\t) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait ctx.replaceMessage(\"_Sorry, something went wrong_\");\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tconst errMsg = err instanceof Error ? err.message : String(err);\n\t\t\t\t\t\tlog.logWarning(\"Failed to post error message\", errMsg);\n\t\t\t\t\t}\n\t\t\t\t} else if (isSilentOutcome(finalOutcome)) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait ctx.deleteMessage();\n\t\t\t\t\t\tlog.logInfo(\"Silent response - deleted message\");\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tconst errMsg = err instanceof Error ? err.message : String(err);\n\t\t\t\t\t\tlog.logWarning(\"Failed to delete message for silent response\", errMsg);\n\t\t\t\t\t}\n\t\t\t\t} else if (finalOutcomeText && !this.runState.finalResponseDelivered) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait ctx.replaceMessage(finalOutcomeText);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tconst errMsg = err instanceof Error ? err.message : String(err);\n\t\t\t\t\t\tlog.logWarning(\"Failed to replace message with final text\", errMsg);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tawait ctx.flush();\n\t\t\t} finally {\n\t\t\t\tawait ctx.close();\n\t\t\t}\n\n\t\t\t// Log usage summary\n\t\t\tif (this.runState.totalUsage.cost.total > 0) {\n\t\t\t\tconst messages = this.session.messages;\n\t\t\t\tconst lastAssistantMessage = messages\n\t\t\t\t\t.slice()\n\t\t\t\t\t.reverse()\n\t\t\t\t\t.find((m: any) => m.role === \"assistant\" && m.stopReason !== \"aborted\") as any;\n\n\t\t\t\tconst contextTokens = lastAssistantMessage\n\t\t\t\t\t? lastAssistantMessage.usage.input +\n\t\t\t\t\t\tlastAssistantMessage.usage.output +\n\t\t\t\t\t\tlastAssistantMessage.usage.cacheRead +\n\t\t\t\t\t\tlastAssistantMessage.usage.cacheWrite\n\t\t\t\t\t: 0;\n\t\t\t\tconst currentRunModel = this.session.model ?? this.activeModel;\n\t\t\t\tconst contextWindow = currentRunModel.contextWindow || 200000;\n\n\t\t\t\tlog.logUsageSummary(this.runState.logCtx!, this.runState.totalUsage, contextTokens, contextWindow);\n\t\t\t}\n\n\t\t\t// Clear run state\n\t\t\tthis.runState.ctx = null;\n\t\t\tthis.runState.logCtx = null;\n\t\t\tthis.runState.queue = null;\n\t\t}\n\n\t\treturn { stopReason: this.runState.stopReason, errorMessage: this.runState.errorMessage };\n\t}\n\n\tasync handleBuiltinCommand(ctx: DingTalkContext, command: BuiltInCommand): Promise<void> {\n\t\ttry {\n\t\t\tswitch (command.name) {\n\t\t\t\tcase \"help\":\n\t\t\t\t\tawait this.sendCommandReply(ctx, renderBuiltInHelp());\n\t\t\t\t\treturn;\n\t\t\t\tcase \"stop\":\n\t\t\t\t\tawait this.sendCommandReply(ctx, \"No task is running. Use `/stop` only while a task is running.\");\n\t\t\t\t\treturn;\n\t\t\t\tcase \"steer\":\n\t\t\t\t\tthis.requireQueuedMessage(command.args, \"steer\");\n\t\t\t\t\tawait this.sendCommandReply(\n\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\"No task is running. Send the message directly instead of using `/steer`.\",\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\tcase \"followup\":\n\t\t\t\t\tthis.requireQueuedMessage(command.args, \"followup\");\n\t\t\t\t\tawait this.sendCommandReply(\n\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\"No task is running. Send the message directly now, or use `/followup` while a task is running.\",\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconst errMsg = err instanceof Error ? err.message : String(err);\n\t\t\tlog.logWarning(`[${this.channelId}] Built-in command failed`, errMsg);\n\t\t\tawait this.sendCommandReply(ctx, `命令执行失败:${errMsg}`);\n\t\t}\n\t}\n\n\tasync queueSteer(text: string, userName?: string): Promise<void> {\n\t\tawait this.queueBusyMessage(\"steer\", this.requireQueuedMessage(text, \"steer\"), userName);\n\t}\n\n\tasync queueFollowUp(text: string, userName?: string): Promise<void> {\n\t\tawait this.queueBusyMessage(\"followUp\", this.requireQueuedMessage(text, \"followup\"), userName);\n\t}\n\n\tasync abort(): Promise<void> {\n\t\tawait this.session.abort();\n\t}\n\n\t// === Private helpers ===\n\n\tprivate async sendCommandReply(ctx: DingTalkContext, text: string): Promise<void> {\n\t\tconst delivered = await ctx.respondPlain(text);\n\t\tif (!delivered) {\n\t\t\tawait ctx.replaceMessage(text);\n\t\t\tawait ctx.flush();\n\t\t}\n\t}\n\n\tprivate requireQueuedMessage(text: string, commandName: \"steer\" | \"followup\"): string {\n\t\tconst trimmedText = text.trim();\n\t\tif (!trimmedText) {\n\t\t\tthrow new Error(`/${commandName} requires a message.`);\n\t\t}\n\t\treturn trimmedText;\n\t}\n\n\tprivate shouldPreserveRawInput(text: string): boolean {\n\t\treturn text.trim().startsWith(\"/\");\n\t}\n\n\tprivate formatUserMessage(text: string, userName?: string, now: Date = new Date()): string {\n\t\tconst pad = (n: number) => n.toString().padStart(2, \"0\");\n\t\tconst offset = -now.getTimezoneOffset();\n\t\tconst offsetSign = offset >= 0 ? \"+\" : \"-\";\n\t\tconst offsetHours = pad(Math.floor(Math.abs(offset) / 60));\n\t\tconst offsetMins = pad(Math.abs(offset) % 60);\n\t\tconst timestamp = `${now.getFullYear()}-${pad(now.getMonth() + 1)}-${pad(now.getDate())} ${pad(now.getHours())}:${pad(now.getMinutes())}:${pad(now.getSeconds())}${offsetSign}${offsetHours}:${offsetMins}`;\n\t\treturn `[${timestamp}] [${userName || \"unknown\"}]: ${text}`;\n\t}\n\n\tprivate async queueBusyMessage(delivery: \"steer\" | \"followUp\", text: string, userName?: string): Promise<void> {\n\t\tif (!this.session.isStreaming) {\n\t\t\tthrow new Error(\"No task is currently running.\");\n\t\t}\n\n\t\tawait this.session.prompt(this.formatUserMessage(text, userName), {\n\t\t\tstreamingBehavior: delivery,\n\t\t});\n\t}\n\n\tprivate resetRunState(ctx: DingTalkContext, store: ChannelStore): void {\n\t\tthis.runState = createEmptyRunState();\n\t\tthis.runState.ctx = ctx;\n\t\tthis.runState.logCtx = {\n\t\t\tchannelId: ctx.message.channel,\n\t\t\tuserName: ctx.message.userName,\n\t\t\tchannelName: ctx.channelName,\n\t\t};\n\t\tthis.runState.store = store;\n\t}\n\n\tprivate async refreshSessionResources(): Promise<void> {\n\t\tawait this.ensureSessionReady();\n\t\tconst skills = loadPipiclawSkills(this.channelDir, this.workspacePath);\n\t\tthis.currentSkills = skills;\n\t\tthis.subAgentDiscovery = this.refreshSubAgentDiscovery();\n\t\tawait this.session.reload();\n\t}\n\n\tprivate async initializeSession(): Promise<void> {\n\t\tconst skills = loadPipiclawSkills(this.channelDir, this.workspacePath);\n\t\tthis.currentSkills = skills;\n\t\tthis.subAgentDiscovery = this.refreshSubAgentDiscovery();\n\t\tawait this.session.reload();\n\t}\n\n\tprivate async ensureSessionReady(): Promise<void> {\n\t\tawait this.sessionReady;\n\t}\n\n\tprivate refreshSubAgentDiscovery(): SubAgentDiscoveryResult {\n\t\tthis.modelRegistry.refresh();\n\t\tconst discovery = discoverSubAgents(this.workspaceDir, this.modelRegistry.getAvailable());\n\t\tfor (const warning of discovery.warnings) {\n\t\t\tlog.logWarning(`Sub-agent config warning (${this.channelId})`, warning);\n\t\t}\n\t\treturn discovery;\n\t}\n\n\t// === Session event subscription ===\n\n\tprivate subscribeToSessionEvents(): void {\n\t\tthis.session.subscribe(async (event: any) => {\n\t\t\tif (!this.runState.ctx || !this.runState.logCtx || !this.runState.queue) return;\n\n\t\t\tconst { ctx, logCtx, queue, pendingTools, store } = this.runState;\n\n\t\t\tif (event.type === \"tool_execution_start\") {\n\t\t\t\tconst agentEvent = event as any & { type: \"tool_execution_start\" };\n\t\t\t\tconst args = agentEvent.args as { label?: string };\n\t\t\t\tconst label = args.label || agentEvent.toolName;\n\n\t\t\t\tpendingTools.set(agentEvent.toolCallId, {\n\t\t\t\t\ttoolName: agentEvent.toolName,\n\t\t\t\t\targs: agentEvent.args,\n\t\t\t\t\tstartTime: Date.now(),\n\t\t\t\t});\n\n\t\t\t\tlog.logToolStart(logCtx, agentEvent.toolName, label, agentEvent.args as Record<string, unknown>);\n\t\t\t\tqueue.enqueue(() => ctx.respond(formatProgressEntry(\"tool\", label), false), \"tool label\");\n\t\t\t} else if (event.type === \"tool_execution_update\") {\n\t\t\t\tconst agentEvent = event as { type: \"tool_execution_update\"; toolName: string; partialResult: unknown };\n\t\t\t\tif (agentEvent.toolName !== \"subagent\") {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst partialText = truncate(extractToolResultText(agentEvent.partialResult), 200);\n\t\t\t\tif (!partialText.trim()) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tqueue.enqueue(() => ctx.respond(formatProgressEntry(\"tool\", partialText), false), \"tool update\");\n\t\t\t} else if (event.type === \"tool_execution_end\") {\n\t\t\t\tconst agentEvent = event as any & { type: \"tool_execution_end\" };\n\t\t\t\tconst resultStr = extractToolResultText(agentEvent.result);\n\t\t\t\tconst pending = pendingTools.get(agentEvent.toolCallId);\n\t\t\t\tpendingTools.delete(agentEvent.toolCallId);\n\n\t\t\t\tconst durationMs = pending ? Date.now() - pending.startTime : 0;\n\t\t\t\tconst subAgentDetails =\n\t\t\t\t\tagentEvent.toolName === \"subagent\" &&\n\t\t\t\t\tagentEvent.result &&\n\t\t\t\t\ttypeof agentEvent.result === \"object\" &&\n\t\t\t\t\t\"details\" in agentEvent.result &&\n\t\t\t\t\tisSubAgentToolDetails((agentEvent.result as { details?: unknown }).details)\n\t\t\t\t\t\t? (agentEvent.result as { details: SubAgentToolDetails }).details\n\t\t\t\t\t\t: null;\n\n\t\t\t\tif (subAgentDetails) {\n\t\t\t\t\tmergeSubAgentUsage(this.runState.totalUsage, subAgentDetails);\n\t\t\t\t\tconst label =\n\t\t\t\t\t\tpending?.args &&\n\t\t\t\t\t\ttypeof pending.args === \"object\" &&\n\t\t\t\t\t\t\"label\" in pending.args &&\n\t\t\t\t\t\ttypeof (pending.args as { label?: unknown }).label === \"string\"\n\t\t\t\t\t\t\t? ((pending.args as { label: string }).label ?? \"subagent\").trim()\n\t\t\t\t\t\t\t: \"subagent\";\n\t\t\t\t\tqueue.enqueue(\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\tstore?.logSubAgentRun(logCtx.channelId, {\n\t\t\t\t\t\t\t\tdate: new Date().toISOString(),\n\t\t\t\t\t\t\t\ttoolCallId: agentEvent.toolCallId,\n\t\t\t\t\t\t\t\tlabel,\n\t\t\t\t\t\t\t\tagent: subAgentDetails.agent,\n\t\t\t\t\t\t\t\tsource: subAgentDetails.source,\n\t\t\t\t\t\t\t\tmodel: subAgentDetails.model,\n\t\t\t\t\t\t\t\ttools: [...subAgentDetails.tools],\n\t\t\t\t\t\t\t\tturns: subAgentDetails.turns,\n\t\t\t\t\t\t\t\ttoolCalls: subAgentDetails.toolCalls,\n\t\t\t\t\t\t\t\tdurationMs: subAgentDetails.durationMs,\n\t\t\t\t\t\t\t\tfailed: subAgentDetails.failed,\n\t\t\t\t\t\t\t\tfailureReason: subAgentDetails.failureReason,\n\t\t\t\t\t\t\t\toutput: resultStr.length > 16000 ? resultStr.slice(0, 16000) : resultStr,\n\t\t\t\t\t\t\t\toutputTruncated: resultStr.length > 16000,\n\t\t\t\t\t\t\t\tusage: {\n\t\t\t\t\t\t\t\t\t...subAgentDetails.usage,\n\t\t\t\t\t\t\t\t\tcost: { ...subAgentDetails.usage.cost },\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}) ?? Promise.resolve(),\n\t\t\t\t\t\t\"sub-agent run log\",\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst treatAsError = agentEvent.isError || Boolean(subAgentDetails?.failed);\n\t\t\t\tif (treatAsError) {\n\t\t\t\t\tlog.logToolError(logCtx, agentEvent.toolName, durationMs, resultStr);\n\t\t\t\t} else {\n\t\t\t\t\tlog.logToolSuccess(logCtx, agentEvent.toolName, durationMs, resultStr);\n\t\t\t\t}\n\n\t\t\t\tif (treatAsError) {\n\t\t\t\t\tqueue.enqueue(\n\t\t\t\t\t\t() => ctx.respond(formatProgressEntry(\"error\", truncate(resultStr, 200)), false),\n\t\t\t\t\t\t\"tool error\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else if (event.type === \"message_start\") {\n\t\t\t\tconst agentEvent = event as any & { type: \"message_start\" };\n\t\t\t\tif (agentEvent.message.role === \"assistant\") {\n\t\t\t\t\tlog.logResponseStart(logCtx);\n\t\t\t\t}\n\t\t\t} else if (event.type === \"message_end\") {\n\t\t\t\tconst agentEvent = event as any & { type: \"message_end\" };\n\t\t\t\tconst commandResultText = extractCustomCommandResultText(agentEvent.message);\n\t\t\t\tif (commandResultText) {\n\t\t\t\t\tthis.runState.finalOutcome = { kind: \"final\", text: commandResultText };\n\t\t\t\t\tlog.logResponse(logCtx, commandResultText);\n\t\t\t\t\tqueue.enqueue(async () => {\n\t\t\t\t\t\tconst delivered = await ctx.respondPlain(commandResultText);\n\t\t\t\t\t\tif (!delivered) {\n\t\t\t\t\t\t\tawait ctx.replaceMessage(commandResultText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.runState.finalResponseDelivered = true;\n\t\t\t\t\t}, \"command result\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (agentEvent.message.role === \"assistant\") {\n\t\t\t\t\tconst assistantMsg = agentEvent.message as any;\n\n\t\t\t\t\tif (assistantMsg.stopReason) {\n\t\t\t\t\t\tthis.runState.stopReason = assistantMsg.stopReason;\n\t\t\t\t\t}\n\t\t\t\t\tif (assistantMsg.errorMessage) {\n\t\t\t\t\t\tthis.runState.errorMessage = assistantMsg.errorMessage;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (assistantMsg.usage) {\n\t\t\t\t\t\tthis.runState.totalUsage.input += assistantMsg.usage.input;\n\t\t\t\t\t\tthis.runState.totalUsage.output += assistantMsg.usage.output;\n\t\t\t\t\t\tthis.runState.totalUsage.cacheRead += assistantMsg.usage.cacheRead;\n\t\t\t\t\t\tthis.runState.totalUsage.cacheWrite += assistantMsg.usage.cacheWrite;\n\t\t\t\t\t\tthis.runState.totalUsage.cost.input += assistantMsg.usage.cost.input;\n\t\t\t\t\t\tthis.runState.totalUsage.cost.output += assistantMsg.usage.cost.output;\n\t\t\t\t\t\tthis.runState.totalUsage.cost.cacheRead += assistantMsg.usage.cost.cacheRead;\n\t\t\t\t\t\tthis.runState.totalUsage.cost.cacheWrite += assistantMsg.usage.cost.cacheWrite;\n\t\t\t\t\t\tthis.runState.totalUsage.cost.total += assistantMsg.usage.cost.total;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst content = agentEvent.message.content;\n\t\t\t\t\tconst thinkingParts: string[] = [];\n\t\t\t\t\tconst textParts: string[] = [];\n\t\t\t\t\tlet hasToolCalls = false;\n\t\t\t\t\tfor (const part of content) {\n\t\t\t\t\t\tif (part.type === \"thinking\") {\n\t\t\t\t\t\t\tthinkingParts.push((part as any).thinking);\n\t\t\t\t\t\t} else if (part.type === \"text\") {\n\t\t\t\t\t\t\ttextParts.push((part as any).text);\n\t\t\t\t\t\t} else if (part.type === \"toolCall\") {\n\t\t\t\t\t\t\thasToolCalls = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst text = textParts.join(\"\\n\");\n\n\t\t\t\t\tfor (const thinking of thinkingParts) {\n\t\t\t\t\t\tlog.logThinking(logCtx, thinking);\n\t\t\t\t\t\tqueue.enqueue(() => ctx.respond(formatProgressEntry(\"thinking\", thinking), false), \"thinking\");\n\t\t\t\t\t}\n\n\t\t\t\t\tif (hasToolCalls && text.trim()) {\n\t\t\t\t\t\tqueue.enqueue(() => ctx.respond(formatProgressEntry(\"assistant\", text), false), \"assistant progress\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (event.type === \"turn_end\") {\n\t\t\t\tconst turnEvent = event as any & {\n\t\t\t\t\ttype: \"turn_end\";\n\t\t\t\t\tmessage: { role: string; stopReason?: string; content: Array<{ type: string; text?: string }> };\n\t\t\t\t\ttoolResults: unknown[];\n\t\t\t\t};\n\t\t\t\tif (turnEvent.message.role === \"assistant\" && turnEvent.toolResults.length === 0) {\n\t\t\t\t\tif (turnEvent.message.stopReason === \"error\" || turnEvent.message.stopReason === \"aborted\") {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst finalContent = turnEvent.message.content as Array<{ type: string; text?: string }>;\n\t\t\t\t\tconst finalText = finalContent\n\t\t\t\t\t\t.filter((part): part is { type: \"text\"; text: string } => part.type === \"text\" && !!part.text)\n\t\t\t\t\t\t.map((part) => part.text)\n\t\t\t\t\t\t.join(\"\\n\");\n\n\t\t\t\t\tconst trimmedFinalText = finalText.trim();\n\t\t\t\t\tif (!trimmedFinalText) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (trimmedFinalText === \"[SILENT]\" || trimmedFinalText.startsWith(\"[SILENT]\")) {\n\t\t\t\t\t\tthis.runState.finalOutcome = { kind: \"silent\" };\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tthis.runState.finalOutcome.kind === \"final\" &&\n\t\t\t\t\t\tthis.runState.finalOutcome.text.trim() === trimmedFinalText\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.runState.finalOutcome = { kind: \"final\", text: finalText };\n\t\t\t\t\tlog.logResponse(logCtx, finalText);\n\t\t\t\t\tqueue.enqueue(async () => {\n\t\t\t\t\t\tconst delivered = await ctx.respondPlain(finalText);\n\t\t\t\t\t\tif (delivered) {\n\t\t\t\t\t\t\tthis.runState.finalResponseDelivered = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}, \"final response\");\n\t\t\t\t}\n\t\t\t} else if (event.type === \"auto_compaction_start\") {\n\t\t\t\tlog.logInfo(`Auto-compaction started (reason: ${(event as any).reason})`);\n\t\t\t\tqueue.enqueue(\n\t\t\t\t\t() => ctx.respond(formatProgressEntry(\"assistant\", \"Compacting context...\"), false),\n\t\t\t\t\t\"compaction start\",\n\t\t\t\t);\n\t\t\t} else if (event.type === \"auto_compaction_end\") {\n\t\t\t\tconst compEvent = event as any;\n\t\t\t\tif (compEvent.result) {\n\t\t\t\t\tlog.logInfo(`Auto-compaction complete: ${compEvent.result.tokensBefore} tokens compacted`);\n\t\t\t\t} else if (compEvent.aborted) {\n\t\t\t\t\tlog.logInfo(\"Auto-compaction aborted\");\n\t\t\t\t}\n\t\t\t} else if (event.type === \"auto_retry_start\") {\n\t\t\t\tconst retryEvent = event as any;\n\t\t\t\tlog.logWarning(`Retrying (${retryEvent.attempt}/${retryEvent.maxAttempts})`, retryEvent.errorMessage);\n\t\t\t\tqueue.enqueue(\n\t\t\t\t\t() =>\n\t\t\t\t\t\tctx.respond(\n\t\t\t\t\t\t\tformatProgressEntry(\"assistant\", `Retrying (${retryEvent.attempt}/${retryEvent.maxAttempts})...`),\n\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t),\n\t\t\t\t\t\"retry\",\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n}\n\n// ============================================================================\n// Factory\n// ============================================================================\n\nconst channelRunners = new Map<string, AgentRunner>();\n\nexport function getOrCreateRunner(sandboxConfig: SandboxConfig, channelId: string, channelDir: string): AgentRunner {\n\tconst existing = channelRunners.get(channelId);\n\tif (existing) return existing;\n\n\tconst runner = new ChannelRunner(sandboxConfig, channelId, channelDir);\n\tchannelRunners.set(channelId, runner);\n\treturn runner;\n}\n"]}
1
+ {"version":3,"file":"agent.js","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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","sourcesContent":["import { Agent } from \"@mariozechner/pi-agent-core\";\nimport type { Api, Model } from \"@mariozechner/pi-ai\";\nimport {\n\tAgentSession,\n\tAuthStorage,\n\tconvertToLlm,\n\tDefaultResourceLoader,\n\tModelRegistry,\n\tSessionManager,\n\ttype Skill,\n} from \"@mariozechner/pi-coding-agent\";\nimport { mkdir, writeFile } from \"fs/promises\";\nimport { dirname, join, resolve } from \"path\";\nimport { COMMAND_RESULT_CUSTOM_TYPE, createCommandExtension } from \"./command-extension.js\";\nimport { type BuiltInCommand, renderBuiltInHelp } from \"./commands.js\";\nimport { getAgentConfig, getApiKeyForModel, getSoul, loadPipiclawSkills } from \"./config-loader.js\";\nimport { PipiclawSettingsManager } from \"./context.js\";\nimport type { DingTalkContext } from \"./dingtalk.js\";\nimport * as log from \"./log.js\";\nimport { createMemoryCandidateCache } from \"./memory-candidates.js\";\nimport { MemoryLifecycle } from \"./memory-lifecycle.js\";\nimport { recallRelevantMemory } from \"./memory-recall.js\";\nimport { resolveInitialModel } from \"./model-utils.js\";\nimport { APP_HOME_DIR, AUTH_CONFIG_PATH, MODELS_CONFIG_PATH } from \"./paths.js\";\nimport { buildAppendSystemPrompt } from \"./prompt-builder.js\";\nimport { createExecutor, type SandboxConfig } from \"./sandbox.js\";\nimport type { ChannelStore } from \"./store.js\";\nimport { discoverSubAgents, formatSubAgentList, type SubAgentDiscoveryResult } from \"./sub-agents.js\";\nimport { createPipiclawTools } from \"./tools/index.js\";\nimport type { SubAgentToolDetails } from \"./tools/subagent.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface AgentRunner {\n\trun(ctx: DingTalkContext, store: ChannelStore): Promise<{ stopReason: string; errorMessage?: string }>;\n\thandleBuiltinCommand(ctx: DingTalkContext, command: BuiltInCommand): Promise<void>;\n\tqueueSteer(text: string, userName?: string): Promise<void>;\n\tqueueFollowUp(text: string, userName?: string): Promise<void>;\n\tabort(): Promise<void>;\n}\n\ntype FinalOutcome = { kind: \"none\" } | { kind: \"silent\" } | { kind: \"final\"; text: string };\ntype ModelRegistryClass = {\n\tcreate?: (authStorage: AuthStorage, modelsJsonPath?: string) => ModelRegistry;\n\tnew (authStorage: AuthStorage, modelsJsonPath?: string): ModelRegistry;\n};\n\nfunction isSilentOutcome(outcome: FinalOutcome): outcome is { kind: \"silent\" } {\n\treturn outcome.kind === \"silent\";\n}\n\nfunction isFinalOutcome(outcome: FinalOutcome): outcome is { kind: \"final\"; text: string } {\n\treturn outcome.kind === \"final\";\n}\n\nfunction getFinalOutcomeText(outcome: FinalOutcome): string | null {\n\treturn isFinalOutcome(outcome) ? outcome.text : null;\n}\n\nfunction createModelRegistry(authStorage: AuthStorage, modelsJsonPath: string): ModelRegistry {\n\tconst registryClass = ModelRegistry as unknown as ModelRegistryClass;\n\treturn typeof registryClass.create === \"function\"\n\t\t? registryClass.create(authStorage, modelsJsonPath)\n\t\t: new registryClass(authStorage, modelsJsonPath);\n}\n\n// ============================================================================\n// Text helpers\n// ============================================================================\n\nfunction truncate(text: string, maxLen: number): string {\n\tif (text.length <= maxLen) return text;\n\treturn `${text.substring(0, maxLen - 3)}...`;\n}\n\nconst MAX_USER_MESSAGE_CHARS = 12_000;\nconst HAN_REGEX = /\\p{Script=Han}/u;\n\nfunction sanitizeProgressText(text: string): string {\n\treturn text\n\t\t.replace(/\\uFFFC/g, \"\")\n\t\t.replace(/\\r/g, \"\")\n\t\t.trim();\n}\n\nfunction clipUserInput(text: string, maxChars: number): string {\n\tconst normalized = text.replace(/\\r/g, \"\").trim();\n\tif (normalized.length <= maxChars) {\n\t\treturn normalized;\n\t}\n\n\tconst headChars = Math.floor(maxChars * 0.6);\n\tconst tailChars = maxChars - headChars;\n\treturn `${normalized.slice(0, headChars)}\\n\\n[... omitted ${normalized.length - maxChars} chars ...]\\n\\n${normalized.slice(-tailChars)}`;\n}\n\nfunction formatProgressEntry(kind: \"tool\" | \"thinking\" | \"error\" | \"assistant\", text: string): string {\n\tconst cleaned = sanitizeProgressText(text);\n\tif (!cleaned) return \"\";\n\n\tconst normalized = cleaned.replace(/\\n+/g, \" \").trim();\n\tswitch (kind) {\n\t\tcase \"tool\":\n\t\t\treturn `Running: ${normalized}`;\n\t\tcase \"thinking\":\n\t\t\treturn `Thinking: ${normalized}`;\n\t\tcase \"error\":\n\t\t\treturn `Error: ${normalized}`;\n\t\tcase \"assistant\":\n\t\t\treturn normalized;\n\t}\n}\n\nfunction extractToolResultText(result: unknown): string {\n\tif (typeof result === \"string\") {\n\t\treturn result;\n\t}\n\n\tif (\n\t\tresult &&\n\t\ttypeof result === \"object\" &&\n\t\t\"content\" in result &&\n\t\tArray.isArray((result as { content: unknown }).content)\n\t) {\n\t\tconst content = (result as { content: Array<{ type: string; text?: string }> }).content;\n\t\tconst textParts: string[] = [];\n\t\tfor (const part of content) {\n\t\t\tif (part.type === \"text\" && part.text) {\n\t\t\t\ttextParts.push(part.text);\n\t\t\t}\n\t\t}\n\t\tif (textParts.length > 0) {\n\t\t\treturn textParts.join(\"\\n\");\n\t\t}\n\t}\n\n\treturn JSON.stringify(result);\n}\n\nfunction isSubAgentToolDetails(value: unknown): value is SubAgentToolDetails {\n\tif (!value || typeof value !== \"object\" || !(\"kind\" in value) || (value as { kind?: unknown }).kind !== \"subagent\") {\n\t\treturn false;\n\t}\n\n\tif (!(\"usage\" in value)) {\n\t\treturn false;\n\t}\n\n\tconst usage = (value as { usage?: unknown }).usage;\n\treturn (\n\t\t!!usage &&\n\t\ttypeof usage === \"object\" &&\n\t\t\"input\" in usage &&\n\t\t\"output\" in usage &&\n\t\t\"cacheRead\" in usage &&\n\t\t\"cacheWrite\" in usage &&\n\t\t\"cost\" in usage\n\t);\n}\n\nfunction mergeSubAgentUsage(totalUsage: UsageTotals, details: SubAgentToolDetails): void {\n\ttotalUsage.input += details.usage.input;\n\ttotalUsage.output += details.usage.output;\n\ttotalUsage.cacheRead += details.usage.cacheRead;\n\ttotalUsage.cacheWrite += details.usage.cacheWrite;\n\ttotalUsage.cost.input += details.usage.cost.input;\n\ttotalUsage.cost.output += details.usage.cost.output;\n\ttotalUsage.cost.cacheRead += details.usage.cost.cacheRead;\n\ttotalUsage.cost.cacheWrite += details.usage.cost.cacheWrite;\n\ttotalUsage.cost.total += details.usage.cost.total;\n}\n\nfunction extractCustomCommandResultText(message: unknown): string | null {\n\tif (\n\t\t!message ||\n\t\ttypeof message !== \"object\" ||\n\t\t!(\"role\" in message) ||\n\t\t!(\"customType\" in message) ||\n\t\t(message as { role?: unknown }).role !== \"custom\" ||\n\t\t(message as { customType?: unknown }).customType !== COMMAND_RESULT_CUSTOM_TYPE\n\t) {\n\t\treturn null;\n\t}\n\n\tconst content = (message as { content?: unknown }).content;\n\treturn typeof content === \"string\" && content.trim() ? content : null;\n}\n\n// ============================================================================\n// Run State\n// ============================================================================\n\ninterface PendingTool {\n\ttoolName: string;\n\targs: unknown;\n\tstartTime: number;\n}\n\ninterface UsageTotals {\n\tinput: number;\n\toutput: number;\n\tcacheRead: number;\n\tcacheWrite: number;\n\tcost: { input: number; output: number; cacheRead: number; cacheWrite: number; total: number };\n}\n\ninterface RunQueue {\n\tenqueue(fn: () => Promise<void>, errorContext: string): void;\n\tenqueueMessage(text: string, target: \"main\" | \"thread\", errorContext: string, doLog?: boolean): void;\n}\n\ninterface RunState {\n\tctx: DingTalkContext | null;\n\tlogCtx: { channelId: string; userName?: string; channelName?: string } | null;\n\tstore: ChannelStore | null;\n\tqueue: RunQueue | null;\n\tpendingTools: Map<string, PendingTool>;\n\ttotalUsage: UsageTotals;\n\tstopReason: string;\n\terrorMessage: string | undefined;\n\tfinalOutcome: FinalOutcome;\n\tfinalResponseDelivered: boolean;\n}\n\nfunction createEmptyRunState(): RunState {\n\treturn {\n\t\tctx: null,\n\t\tlogCtx: null,\n\t\tstore: null,\n\t\tqueue: null,\n\t\tpendingTools: new Map(),\n\t\ttotalUsage: {\n\t\t\tinput: 0,\n\t\t\toutput: 0,\n\t\t\tcacheRead: 0,\n\t\t\tcacheWrite: 0,\n\t\t\tcost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, total: 0 },\n\t\t},\n\t\tstopReason: \"stop\",\n\t\terrorMessage: undefined,\n\t\tfinalOutcome: { kind: \"none\" },\n\t\tfinalResponseDelivered: false,\n\t};\n}\n\ninterface AssistantUsage {\n\tinput: number;\n\toutput: number;\n\tcacheRead: number;\n\tcacheWrite: number;\n\tcost: { input: number; output: number; cacheRead: number; cacheWrite: number; total: number };\n}\n\ntype AssistantContentPart =\n\t| { type: \"thinking\"; thinking: string }\n\t| { type: \"text\"; text: string }\n\t| { type: \"toolCall\" }\n\t| { type: string; [key: string]: unknown };\n\ninterface AssistantEventMessage {\n\trole: \"assistant\";\n\tcontent: AssistantContentPart[];\n\tstopReason?: string;\n\terrorMessage?: string;\n\tusage?: AssistantUsage;\n}\n\ntype SessionEvent =\n\t| { type: \"tool_execution_start\"; toolCallId: string; toolName: string; args: unknown }\n\t| { type: \"tool_execution_update\"; toolCallId: string; toolName: string; args: unknown; partialResult: unknown }\n\t| { type: \"tool_execution_end\"; toolCallId: string; toolName: string; result: unknown; isError: boolean }\n\t| { type: \"message_start\"; message: unknown }\n\t| { type: \"message_end\"; message: unknown }\n\t| { type: \"turn_end\"; message: unknown; toolResults: unknown[] }\n\t| { type: \"auto_compaction_start\"; reason: \"threshold\" | \"overflow\" }\n\t| { type: \"auto_compaction_end\"; result?: { tokensBefore: number }; aborted?: boolean }\n\t| { type: \"auto_retry_start\"; attempt: number; maxAttempts: number; delayMs?: number; errorMessage: string };\n\ntype ToolExecutionStartEvent = Extract<SessionEvent, { type: \"tool_execution_start\" }>;\ntype ToolExecutionUpdateEvent = Extract<SessionEvent, { type: \"tool_execution_update\" }>;\ntype ToolExecutionEndEvent = Extract<SessionEvent, { type: \"tool_execution_end\" }>;\ntype MessageStartEvent = Extract<SessionEvent, { type: \"message_start\" }>;\ntype MessageEndEvent = Extract<SessionEvent, { type: \"message_end\" }>;\ntype TurnEndEvent = Extract<SessionEvent, { type: \"turn_end\" }>;\ntype AutoCompactionStartEvent = Extract<SessionEvent, { type: \"auto_compaction_start\" }>;\ntype AutoCompactionEndEvent = Extract<SessionEvent, { type: \"auto_compaction_end\" }>;\ntype AutoRetryStartEvent = Extract<SessionEvent, { type: \"auto_retry_start\" }>;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null;\n}\n\nfunction isMessageWithRole(value: unknown): value is { role: string } {\n\treturn isRecord(value) && typeof value.role === \"string\";\n}\n\nfunction isAssistantEventMessage(value: unknown): value is AssistantEventMessage {\n\treturn (\n\t\tisMessageWithRole(value) && value.role === \"assistant\" && Array.isArray((value as { content?: unknown }).content)\n\t);\n}\n\nfunction isThinkingPart(part: AssistantContentPart): part is Extract<AssistantContentPart, { type: \"thinking\" }> {\n\treturn part.type === \"thinking\" && typeof (part as { thinking?: unknown }).thinking === \"string\";\n}\n\nfunction isTextPart(part: AssistantContentPart): part is Extract<AssistantContentPart, { type: \"text\" }> {\n\treturn part.type === \"text\" && typeof (part as { text?: unknown }).text === \"string\";\n}\n\nfunction extractLabelFromArgs(args: unknown): string | null {\n\tif (!isRecord(args)) {\n\t\treturn null;\n\t}\n\treturn typeof args.label === \"string\" && args.label.trim() ? args.label.trim() : null;\n}\n\nfunction hasEventType(\n\tvalue: unknown,\n\ttype: SessionEvent[\"type\"],\n): value is { type: SessionEvent[\"type\"] } & Record<string, unknown> {\n\treturn isRecord(value) && value.type === type;\n}\n\nfunction isToolExecutionStartEvent(value: unknown): value is ToolExecutionStartEvent {\n\treturn (\n\t\thasEventType(value, \"tool_execution_start\") &&\n\t\ttypeof value.toolCallId === \"string\" &&\n\t\ttypeof value.toolName === \"string\"\n\t);\n}\n\nfunction isToolExecutionUpdateEvent(value: unknown): value is ToolExecutionUpdateEvent {\n\treturn (\n\t\thasEventType(value, \"tool_execution_update\") &&\n\t\ttypeof value.toolCallId === \"string\" &&\n\t\ttypeof value.toolName === \"string\"\n\t);\n}\n\nfunction isToolExecutionEndEvent(value: unknown): value is ToolExecutionEndEvent {\n\treturn (\n\t\thasEventType(value, \"tool_execution_end\") &&\n\t\ttypeof value.toolCallId === \"string\" &&\n\t\ttypeof value.toolName === \"string\" &&\n\t\ttypeof value.isError === \"boolean\"\n\t);\n}\n\nfunction isMessageStartEvent(value: unknown): value is MessageStartEvent {\n\treturn hasEventType(value, \"message_start\") && \"message\" in value;\n}\n\nfunction isMessageEndEvent(value: unknown): value is MessageEndEvent {\n\treturn hasEventType(value, \"message_end\") && \"message\" in value;\n}\n\nfunction isTurnEndEvent(value: unknown): value is TurnEndEvent {\n\treturn hasEventType(value, \"turn_end\") && \"message\" in value && Array.isArray(value.toolResults);\n}\n\nfunction isAutoCompactionStartEvent(value: unknown): value is AutoCompactionStartEvent {\n\treturn hasEventType(value, \"auto_compaction_start\") && (value.reason === \"threshold\" || value.reason === \"overflow\");\n}\n\nfunction isAutoCompactionEndEvent(value: unknown): value is AutoCompactionEndEvent {\n\treturn hasEventType(value, \"auto_compaction_end\");\n}\n\nfunction isAutoRetryStartEvent(value: unknown): value is AutoRetryStartEvent {\n\treturn (\n\t\thasEventType(value, \"auto_retry_start\") &&\n\t\ttypeof value.attempt === \"number\" &&\n\t\ttypeof value.maxAttempts === \"number\" &&\n\t\ttypeof value.errorMessage === \"string\"\n\t);\n}\n\n// ============================================================================\n// ChannelRunner\n// ============================================================================\n\nclass ChannelRunner implements AgentRunner {\n\t// --- Constructed once ---\n\tprivate readonly sandboxConfig: SandboxConfig;\n\tprivate readonly channelId: string;\n\tprivate readonly channelDir: string;\n\tprivate readonly workspacePath: string;\n\tprivate readonly workspaceDir: string;\n\tprivate readonly session: AgentSession;\n\tprivate readonly agent: Agent;\n\tprivate readonly sessionManager: SessionManager;\n\tprivate readonly settingsManager: PipiclawSettingsManager;\n\tprivate readonly modelRegistry: ModelRegistry;\n\tprivate readonly memoryLifecycle: MemoryLifecycle;\n\tprivate readonly sessionReady: Promise<void>;\n\tprivate subAgentDiscovery: SubAgentDiscoveryResult;\n\n\t// --- Mutable across runs ---\n\tprivate activeModel: Model<Api>;\n\tprivate currentSkills: Skill[];\n\n\t// --- Per run ---\n\tprivate runState: RunState = createEmptyRunState();\n\n\tconstructor(sandboxConfig: SandboxConfig, channelId: string, channelDir: string) {\n\t\tthis.sandboxConfig = sandboxConfig;\n\t\tthis.channelId = channelId;\n\t\tthis.channelDir = channelDir;\n\n\t\tconst executor = createExecutor(sandboxConfig);\n\t\tthis.workspaceDir = resolve(dirname(channelDir));\n\t\tthis.workspacePath = executor.getWorkspacePath(this.workspaceDir);\n\n\t\t// Initial skill summaries\n\t\tconst initialSkills = loadPipiclawSkills(channelDir, this.workspacePath);\n\t\tthis.currentSkills = initialSkills;\n\n\t\t// Create session manager\n\t\tconst contextFile = join(channelDir, \"context.jsonl\");\n\t\tthis.sessionManager = SessionManager.open(contextFile, channelDir);\n\t\tthis.settingsManager = new PipiclawSettingsManager(APP_HOME_DIR);\n\n\t\t// Create AuthStorage and ModelRegistry\n\t\tconst authStorage = AuthStorage.create(AUTH_CONFIG_PATH);\n\t\tthis.modelRegistry = createModelRegistry(authStorage, MODELS_CONFIG_PATH);\n\n\t\t// Resolve model: prefer saved global default, fall back to first available model\n\t\tthis.activeModel = resolveInitialModel(this.modelRegistry, this.settingsManager);\n\t\tlog.logInfo(`Using model: ${this.activeModel.provider}/${this.activeModel.id} (${this.activeModel.name})`);\n\t\tthis.subAgentDiscovery = this.refreshSubAgentDiscovery();\n\n\t\t// Create tools\n\t\tconst tools = createPipiclawTools({\n\t\t\texecutor,\n\t\t\tgetCurrentModel: () => this.activeModel,\n\t\t\tgetAvailableModels: () => this.modelRegistry.getAvailable(),\n\t\t\tresolveApiKey: async (model) => getApiKeyForModel(this.modelRegistry, model),\n\t\t\tworkspaceDir: this.workspaceDir,\n\t\t\tchannelDir: this.channelDir,\n\t\t\tworkspacePath: this.workspacePath,\n\t\t\tchannelId: this.channelId,\n\t\t\tsandboxConfig: this.sandboxConfig,\n\t\t\tgetSubAgentDiscovery: () => this.subAgentDiscovery,\n\t\t\tgetMemoryRecallSettings: () => this.settingsManager.getMemoryRecallSettings(),\n\t\t});\n\n\t\t// Create agent\n\t\tthis.agent = new Agent({\n\t\t\tinitialState: {\n\t\t\t\tsystemPrompt: \"\",\n\t\t\t\tmodel: this.activeModel,\n\t\t\t\tthinkingLevel: \"off\",\n\t\t\t\ttools,\n\t\t\t},\n\t\t\tconvertToLlm,\n\t\t\tgetApiKey: async () => getApiKeyForModel(this.modelRegistry, this.activeModel),\n\t\t});\n\n\t\tthis.memoryLifecycle = new MemoryLifecycle({\n\t\t\tchannelId: this.channelId,\n\t\t\tchannelDir: this.channelDir,\n\t\t\tgetMessages: () => this.session.messages,\n\t\t\tgetSessionEntries: () => this.sessionManager.getBranch(),\n\t\t\tgetModel: () => this.session.model ?? this.activeModel,\n\t\t\tresolveApiKey: async (model) => getApiKeyForModel(this.modelRegistry, model),\n\t\t\tgetSessionMemorySettings: () => this.settingsManager.getSessionMemorySettings(),\n\t\t});\n\n\t\tconst resourceLoader = new DefaultResourceLoader({\n\t\t\tcwd: process.cwd(),\n\t\t\tagentDir: APP_HOME_DIR,\n\t\t\tsettingsManager: this.settingsManager as any,\n\t\t\textensionFactories: [\n\t\t\t\tthis.memoryLifecycle.createExtensionFactory(),\n\t\t\t\tcreateCommandExtension({\n\t\t\t\t\tgetCurrentModel: () => this.session.model ?? this.activeModel,\n\t\t\t\t\tgetAvailableModels: async () => {\n\t\t\t\t\t\tthis.modelRegistry.refresh();\n\t\t\t\t\t\treturn await this.modelRegistry.getAvailable();\n\t\t\t\t\t},\n\t\t\t\t\tgetSessionStats: () => this.session.getSessionStats(),\n\t\t\t\t\tgetThinkingLevel: () => this.session.thinkingLevel,\n\t\t\t\t\tswitchModel: async (model) => {\n\t\t\t\t\t\tawait this.session.setModel(model);\n\t\t\t\t\t\tthis.activeModel = model;\n\t\t\t\t\t},\n\t\t\t\t\trefreshSessionResources: async () => {\n\t\t\t\t\t\tawait this.refreshSessionResources();\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t],\n\t\t\tappendSystemPromptOverride: (base) => {\n\t\t\t\tconst soul = getSoul(this.workspaceDir);\n\t\t\t\tconst sections = [...base];\n\t\t\t\tif (soul) {\n\t\t\t\t\tsections.unshift(soul);\n\t\t\t\t}\n\t\t\t\tsections.push(\n\t\t\t\t\tbuildAppendSystemPrompt(this.workspacePath, this.channelId, this.sandboxConfig, {\n\t\t\t\t\t\tsubAgentList: formatSubAgentList(this.subAgentDiscovery.agents),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t\treturn sections;\n\t\t\t},\n\t\t\tagentsFilesOverride: () => {\n\t\t\t\tconst agentConfig = getAgentConfig(this.channelDir);\n\t\t\t\treturn {\n\t\t\t\t\tagentsFiles: agentConfig ? [{ path: `${this.workspacePath}/AGENTS.md`, content: agentConfig }] : [],\n\t\t\t\t};\n\t\t\t},\n\t\t\tskillsOverride: (base) => ({\n\t\t\t\tskills: [...base.skills, ...this.currentSkills],\n\t\t\t\tdiagnostics: base.diagnostics,\n\t\t\t}),\n\t\t});\n\n\t\tconst baseToolsOverride = Object.fromEntries(tools.map((tool) => [tool.name, tool]));\n\n\t\t// Create AgentSession\n\t\tthis.session = new AgentSession({\n\t\t\tagent: this.agent,\n\t\t\tsessionManager: this.sessionManager,\n\t\t\tsettingsManager: this.settingsManager as any,\n\t\t\tcwd: process.cwd(),\n\t\t\tmodelRegistry: this.modelRegistry,\n\t\t\tresourceLoader,\n\t\t\tbaseToolsOverride,\n\t\t});\n\n\t\t// Subscribe to session events\n\t\tthis.subscribeToSessionEvents();\n\t\tthis.sessionReady = this.initializeSession();\n\t}\n\n\t// === Public API ===\n\n\tasync run(ctx: DingTalkContext, store: ChannelStore): Promise<{ stopReason: string; errorMessage?: string }> {\n\t\tthis.resetRunState(ctx, store);\n\n\t\t// Create queue for this run\n\t\tlet queueChain = Promise.resolve();\n\t\tthis.runState.queue = {\n\t\t\tenqueue: (fn: () => Promise<void>, errorContext: string): void => {\n\t\t\t\tqueueChain = queueChain.then(async () => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait fn();\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tconst errMsg = err instanceof Error ? err.message : String(err);\n\t\t\t\t\t\tlog.logWarning(`DingTalk API error (${errorContext})`, errMsg);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t},\n\t\t\tenqueueMessage: function (text: string, target: \"main\" | \"thread\", errorContext: string, doLog = true): void {\n\t\t\t\tthis.enqueue(\n\t\t\t\t\t() => (target === \"main\" ? ctx.respond(text, doLog) : ctx.respondInThread(text)),\n\t\t\t\t\terrorContext,\n\t\t\t\t);\n\t\t\t},\n\t\t};\n\n\t\ttry {\n\t\t\tawait this.ensureSessionReady();\n\n\t\t\t// Ensure channel directory exists\n\t\t\tawait mkdir(this.channelDir, { recursive: true });\n\n\t\t\tconst candidateCache = createMemoryCandidateCache();\n\t\t\tconst clippedInput = clipUserInput(ctx.message.text, MAX_USER_MESSAGE_CHARS);\n\t\t\tconst userMessage = this.formatUserMessage(clippedInput, ctx.message.userName);\n\t\t\tlet promptText = this.shouldPreserveRawInput(ctx.message.text) ? clippedInput : userMessage;\n\t\t\tlet recalledContextText = \"\";\n\n\t\t\tif (!this.shouldPreserveRawInput(ctx.message.text)) {\n\t\t\t\tconst recallSettings = this.settingsManager.getMemoryRecallSettings();\n\t\t\t\tif (recallSettings.enabled) {\n\t\t\t\t\tconst recall = await recallRelevantMemory({\n\t\t\t\t\t\tquery: clippedInput,\n\t\t\t\t\t\tworkspaceDir: this.workspaceDir,\n\t\t\t\t\t\tchannelDir: this.channelDir,\n\t\t\t\t\t\tmaxCandidates: recallSettings.maxCandidates,\n\t\t\t\t\t\tmaxInjected: recallSettings.maxInjected,\n\t\t\t\t\t\tmaxChars: recallSettings.maxChars,\n\t\t\t\t\t\trerankWithModel: recallSettings.rerankWithModel,\n\t\t\t\t\t\tautoRerank: HAN_REGEX.test(clippedInput),\n\t\t\t\t\t\tmodel: this.session.model ?? this.activeModel,\n\t\t\t\t\t\tresolveApiKey: async (model) => getApiKeyForModel(this.modelRegistry, model),\n\t\t\t\t\t\tcandidateCache,\n\t\t\t\t\t});\n\n\t\t\t\t\tif (recall.renderedText) {\n\t\t\t\t\t\trecalledContextText = recall.renderedText;\n\t\t\t\t\t\tpromptText = `${recall.renderedText}\\n\\n<user_message>\\n${promptText}\\n</user_message>`;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Debug: write context to last_prompt.json (only with PIPICLAW_DEBUG=1)\n\t\t\tif (process.env.PIPICLAW_DEBUG) {\n\t\t\t\tconst debugContext = {\n\t\t\t\t\tsystemPrompt: this.agent.state.systemPrompt,\n\t\t\t\t\tmessages: this.session.messages,\n\t\t\t\t\trecalledContext: recalledContextText || undefined,\n\t\t\t\t\tnewUserMessage: promptText,\n\t\t\t\t};\n\t\t\t\tawait writeFile(join(this.channelDir, \"last_prompt.json\"), JSON.stringify(debugContext, null, 2));\n\t\t\t}\n\n\t\t\tawait this.session.prompt(promptText);\n\t\t} catch (err) {\n\t\t\tthis.runState.stopReason = \"error\";\n\t\t\tthis.runState.errorMessage = err instanceof Error ? err.message : String(err);\n\t\t\tlog.logWarning(`[${this.channelId}] Runner failed`, this.runState.errorMessage);\n\t\t} finally {\n\t\t\tawait queueChain;\n\t\t\tconst finalOutcome = this.runState.finalOutcome;\n\t\t\tconst finalOutcomeText = getFinalOutcomeText(finalOutcome);\n\n\t\t\ttry {\n\t\t\t\tif (\n\t\t\t\t\tthis.runState.stopReason === \"error\" &&\n\t\t\t\t\tthis.runState.errorMessage &&\n\t\t\t\t\t!this.runState.finalResponseDelivered\n\t\t\t\t) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait ctx.replaceMessage(\"_Sorry, something went wrong_\");\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tconst errMsg = err instanceof Error ? err.message : String(err);\n\t\t\t\t\t\tlog.logWarning(\"Failed to post error message\", errMsg);\n\t\t\t\t\t}\n\t\t\t\t} else if (isSilentOutcome(finalOutcome)) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait ctx.deleteMessage();\n\t\t\t\t\t\tlog.logInfo(\"Silent response - deleted message\");\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tconst errMsg = err instanceof Error ? err.message : String(err);\n\t\t\t\t\t\tlog.logWarning(\"Failed to delete message for silent response\", errMsg);\n\t\t\t\t\t}\n\t\t\t\t} else if (finalOutcomeText && !this.runState.finalResponseDelivered) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait ctx.replaceMessage(finalOutcomeText);\n\t\t\t\t\t} catch (err) {\n\t\t\t\t\t\tconst errMsg = err instanceof Error ? err.message : String(err);\n\t\t\t\t\t\tlog.logWarning(\"Failed to replace message with final text\", errMsg);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tawait ctx.flush();\n\t\t\t} finally {\n\t\t\t\tawait ctx.close();\n\t\t\t}\n\n\t\t\t// Log usage summary\n\t\t\tif (this.runState.totalUsage.cost.total > 0) {\n\t\t\t\tconst messages = this.session.messages;\n\t\t\t\tconst lastAssistantMessage = messages\n\t\t\t\t\t.slice()\n\t\t\t\t\t.reverse()\n\t\t\t\t\t.find((m: any) => m.role === \"assistant\" && m.stopReason !== \"aborted\") as any;\n\n\t\t\t\tconst contextTokens = lastAssistantMessage\n\t\t\t\t\t? lastAssistantMessage.usage.input +\n\t\t\t\t\t\tlastAssistantMessage.usage.output +\n\t\t\t\t\t\tlastAssistantMessage.usage.cacheRead +\n\t\t\t\t\t\tlastAssistantMessage.usage.cacheWrite\n\t\t\t\t\t: 0;\n\t\t\t\tconst currentRunModel = this.session.model ?? this.activeModel;\n\t\t\t\tconst contextWindow = currentRunModel.contextWindow || 200000;\n\n\t\t\t\tlog.logUsageSummary(this.runState.logCtx!, this.runState.totalUsage, contextTokens, contextWindow);\n\t\t\t}\n\n\t\t\t// Clear run state\n\t\t\tthis.runState.ctx = null;\n\t\t\tthis.runState.logCtx = null;\n\t\t\tthis.runState.queue = null;\n\t\t}\n\n\t\treturn { stopReason: this.runState.stopReason, errorMessage: this.runState.errorMessage };\n\t}\n\n\tasync handleBuiltinCommand(ctx: DingTalkContext, command: BuiltInCommand): Promise<void> {\n\t\ttry {\n\t\t\tswitch (command.name) {\n\t\t\t\tcase \"help\":\n\t\t\t\t\tawait this.sendCommandReply(ctx, renderBuiltInHelp());\n\t\t\t\t\treturn;\n\t\t\t\tcase \"stop\":\n\t\t\t\t\tawait this.sendCommandReply(ctx, \"No task is running. Use `/stop` only while a task is running.\");\n\t\t\t\t\treturn;\n\t\t\t\tcase \"steer\":\n\t\t\t\t\tthis.requireQueuedMessage(command.args, \"steer\");\n\t\t\t\t\tawait this.sendCommandReply(\n\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\"No task is running. Send the message directly instead of using `/steer`.\",\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t\tcase \"followup\":\n\t\t\t\t\tthis.requireQueuedMessage(command.args, \"followup\");\n\t\t\t\t\tawait this.sendCommandReply(\n\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\"No task is running. Send the message directly now, or use `/followup` while a task is running.\",\n\t\t\t\t\t);\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconst errMsg = err instanceof Error ? err.message : String(err);\n\t\t\tlog.logWarning(`[${this.channelId}] Built-in command failed`, errMsg);\n\t\t\tawait this.sendCommandReply(ctx, `命令执行失败:${errMsg}`);\n\t\t}\n\t}\n\n\tasync queueSteer(text: string, userName?: string): Promise<void> {\n\t\tawait this.queueBusyMessage(\"steer\", this.requireQueuedMessage(text, \"steer\"), userName);\n\t}\n\n\tasync queueFollowUp(text: string, userName?: string): Promise<void> {\n\t\tawait this.queueBusyMessage(\"followUp\", this.requireQueuedMessage(text, \"followup\"), userName);\n\t}\n\n\tasync abort(): Promise<void> {\n\t\tawait this.session.abort();\n\t}\n\n\t// === Private helpers ===\n\n\tprivate async sendCommandReply(ctx: DingTalkContext, text: string): Promise<void> {\n\t\tconst delivered = await ctx.respondPlain(text);\n\t\tif (!delivered) {\n\t\t\tawait ctx.replaceMessage(text);\n\t\t\tawait ctx.flush();\n\t\t}\n\t}\n\n\tprivate requireQueuedMessage(text: string, commandName: \"steer\" | \"followup\"): string {\n\t\tconst trimmedText = text.trim();\n\t\tif (!trimmedText) {\n\t\t\tthrow new Error(`/${commandName} requires a message.`);\n\t\t}\n\t\treturn trimmedText;\n\t}\n\n\tprivate shouldPreserveRawInput(text: string): boolean {\n\t\treturn text.trim().startsWith(\"/\");\n\t}\n\n\tprivate formatUserMessage(text: string, userName?: string, now: Date = new Date()): string {\n\t\tconst pad = (n: number) => n.toString().padStart(2, \"0\");\n\t\tconst offset = -now.getTimezoneOffset();\n\t\tconst offsetSign = offset >= 0 ? \"+\" : \"-\";\n\t\tconst offsetHours = pad(Math.floor(Math.abs(offset) / 60));\n\t\tconst offsetMins = pad(Math.abs(offset) % 60);\n\t\tconst timestamp = `${now.getFullYear()}-${pad(now.getMonth() + 1)}-${pad(now.getDate())} ${pad(now.getHours())}:${pad(now.getMinutes())}:${pad(now.getSeconds())}${offsetSign}${offsetHours}:${offsetMins}`;\n\t\treturn `[${timestamp}] [${userName || \"unknown\"}]: ${text}`;\n\t}\n\n\tprivate async queueBusyMessage(delivery: \"steer\" | \"followUp\", text: string, userName?: string): Promise<void> {\n\t\tif (!this.session.isStreaming) {\n\t\t\tthrow new Error(\"No task is currently running.\");\n\t\t}\n\n\t\tconst clippedText = clipUserInput(text, MAX_USER_MESSAGE_CHARS);\n\t\tif (clippedText !== text.trim()) {\n\t\t\tlog.logWarning(`[${this.channelId}] Queued message exceeded ${MAX_USER_MESSAGE_CHARS} chars and was clipped`);\n\t\t}\n\n\t\tawait this.session.prompt(this.formatUserMessage(clippedText, userName), {\n\t\t\tstreamingBehavior: delivery,\n\t\t});\n\t}\n\n\tprivate resetRunState(ctx: DingTalkContext, store: ChannelStore): void {\n\t\tthis.runState = createEmptyRunState();\n\t\tthis.runState.ctx = ctx;\n\t\tthis.runState.logCtx = {\n\t\t\tchannelId: ctx.message.channel,\n\t\t\tuserName: ctx.message.userName,\n\t\t\tchannelName: ctx.channelName,\n\t\t};\n\t\tthis.runState.store = store;\n\t}\n\n\tprivate async refreshSessionResources(): Promise<void> {\n\t\tawait this.ensureSessionReady();\n\t\tconst skills = loadPipiclawSkills(this.channelDir, this.workspacePath);\n\t\tthis.currentSkills = skills;\n\t\tthis.subAgentDiscovery = this.refreshSubAgentDiscovery();\n\t\tawait this.session.reload();\n\t}\n\n\tprivate async initializeSession(): Promise<void> {\n\t\tconst skills = loadPipiclawSkills(this.channelDir, this.workspacePath);\n\t\tthis.currentSkills = skills;\n\t\tthis.subAgentDiscovery = this.refreshSubAgentDiscovery();\n\t\tawait this.session.reload();\n\t}\n\n\tprivate async ensureSessionReady(): Promise<void> {\n\t\tawait this.sessionReady;\n\t}\n\n\tprivate refreshSubAgentDiscovery(): SubAgentDiscoveryResult {\n\t\tthis.modelRegistry.refresh();\n\t\tconst discovery = discoverSubAgents(this.workspaceDir, this.modelRegistry.getAvailable());\n\t\tfor (const warning of discovery.warnings) {\n\t\t\tlog.logWarning(`Sub-agent config warning (${this.channelId})`, warning);\n\t\t}\n\t\treturn discovery;\n\t}\n\n\t// === Session event subscription ===\n\n\tprivate subscribeToSessionEvents(): void {\n\t\tthis.session.subscribe(async (event: unknown) => {\n\t\t\tif (!this.runState.ctx || !this.runState.logCtx || !this.runState.queue) return;\n\n\t\t\tconst { ctx, logCtx, queue, pendingTools, store } = this.runState;\n\n\t\t\tif (isToolExecutionStartEvent(event)) {\n\t\t\t\tconst label = extractLabelFromArgs(event.args) || event.toolName;\n\n\t\t\t\tpendingTools.set(event.toolCallId, {\n\t\t\t\t\ttoolName: event.toolName,\n\t\t\t\t\targs: event.args,\n\t\t\t\t\tstartTime: Date.now(),\n\t\t\t\t});\n\t\t\t\tthis.memoryLifecycle.noteToolCall();\n\n\t\t\t\tlog.logToolStart(logCtx, event.toolName, label, isRecord(event.args) ? event.args : {});\n\t\t\t\tqueue.enqueue(() => ctx.respond(formatProgressEntry(\"tool\", label), false), \"tool label\");\n\t\t\t} else if (isToolExecutionUpdateEvent(event)) {\n\t\t\t\tif (event.toolName !== \"subagent\") {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst partialText = truncate(extractToolResultText(event.partialResult), 200);\n\t\t\t\tif (!partialText.trim()) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tqueue.enqueue(() => ctx.respond(formatProgressEntry(\"tool\", partialText), false), \"tool update\");\n\t\t\t} else if (isToolExecutionEndEvent(event)) {\n\t\t\t\tconst resultStr = extractToolResultText(event.result);\n\t\t\t\tconst pending = pendingTools.get(event.toolCallId);\n\t\t\t\tpendingTools.delete(event.toolCallId);\n\n\t\t\t\tconst durationMs = pending ? Date.now() - pending.startTime : 0;\n\t\t\t\tconst subAgentDetails =\n\t\t\t\t\tevent.toolName === \"subagent\" &&\n\t\t\t\t\tisRecord(event.result) &&\n\t\t\t\t\t\"details\" in event.result &&\n\t\t\t\t\tisSubAgentToolDetails((event.result as { details?: unknown }).details)\n\t\t\t\t\t\t? (event.result as { details: SubAgentToolDetails }).details\n\t\t\t\t\t\t: null;\n\n\t\t\t\tif (subAgentDetails) {\n\t\t\t\t\tmergeSubAgentUsage(this.runState.totalUsage, subAgentDetails);\n\t\t\t\t\tconst label =\n\t\t\t\t\t\tpending?.args &&\n\t\t\t\t\t\ttypeof pending.args === \"object\" &&\n\t\t\t\t\t\t\"label\" in pending.args &&\n\t\t\t\t\t\ttypeof (pending.args as { label?: unknown }).label === \"string\"\n\t\t\t\t\t\t\t? ((pending.args as { label: string }).label ?? \"subagent\").trim()\n\t\t\t\t\t\t\t: \"subagent\";\n\t\t\t\t\tqueue.enqueue(\n\t\t\t\t\t\t() =>\n\t\t\t\t\t\t\tstore?.logSubAgentRun(logCtx.channelId, {\n\t\t\t\t\t\t\t\tdate: new Date().toISOString(),\n\t\t\t\t\t\t\t\ttoolCallId: event.toolCallId,\n\t\t\t\t\t\t\t\tlabel,\n\t\t\t\t\t\t\t\tagent: subAgentDetails.agent,\n\t\t\t\t\t\t\t\tsource: subAgentDetails.source,\n\t\t\t\t\t\t\t\tmodel: subAgentDetails.model,\n\t\t\t\t\t\t\t\ttools: [...subAgentDetails.tools],\n\t\t\t\t\t\t\t\tturns: subAgentDetails.turns,\n\t\t\t\t\t\t\t\ttoolCalls: subAgentDetails.toolCalls,\n\t\t\t\t\t\t\t\tdurationMs: subAgentDetails.durationMs,\n\t\t\t\t\t\t\t\tfailed: subAgentDetails.failed,\n\t\t\t\t\t\t\t\tfailureReason: subAgentDetails.failureReason,\n\t\t\t\t\t\t\t\toutput: resultStr.length > 16000 ? resultStr.slice(0, 16000) : resultStr,\n\t\t\t\t\t\t\t\toutputTruncated: resultStr.length > 16000,\n\t\t\t\t\t\t\t\tusage: {\n\t\t\t\t\t\t\t\t\t...subAgentDetails.usage,\n\t\t\t\t\t\t\t\t\tcost: { ...subAgentDetails.usage.cost },\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}) ?? Promise.resolve(),\n\t\t\t\t\t\t\"sub-agent run log\",\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tconst treatAsError = event.isError || Boolean(subAgentDetails?.failed);\n\t\t\t\tif (treatAsError) {\n\t\t\t\t\tlog.logToolError(logCtx, event.toolName, durationMs, resultStr);\n\t\t\t\t} else {\n\t\t\t\t\tlog.logToolSuccess(logCtx, event.toolName, durationMs, resultStr);\n\t\t\t\t}\n\n\t\t\t\tif (treatAsError) {\n\t\t\t\t\tqueue.enqueue(\n\t\t\t\t\t\t() => ctx.respond(formatProgressEntry(\"error\", truncate(resultStr, 200)), false),\n\t\t\t\t\t\t\"tool error\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else if (isMessageStartEvent(event)) {\n\t\t\t\tif (isAssistantEventMessage(event.message)) {\n\t\t\t\t\tlog.logResponseStart(logCtx);\n\t\t\t\t}\n\t\t\t} else if (isMessageEndEvent(event)) {\n\t\t\t\tconst commandResultText = extractCustomCommandResultText(event.message);\n\t\t\t\tif (commandResultText) {\n\t\t\t\t\tthis.runState.finalOutcome = { kind: \"final\", text: commandResultText };\n\t\t\t\t\tlog.logResponse(logCtx, commandResultText);\n\t\t\t\t\tqueue.enqueue(async () => {\n\t\t\t\t\t\tconst delivered = await ctx.respondPlain(commandResultText);\n\t\t\t\t\t\tif (!delivered) {\n\t\t\t\t\t\t\tawait ctx.replaceMessage(commandResultText);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.runState.finalResponseDelivered = true;\n\t\t\t\t\t}, \"command result\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (isAssistantEventMessage(event.message)) {\n\t\t\t\t\tconst assistantMsg = event.message;\n\n\t\t\t\t\tif (assistantMsg.stopReason) {\n\t\t\t\t\t\tthis.runState.stopReason = assistantMsg.stopReason;\n\t\t\t\t\t}\n\t\t\t\t\tif (assistantMsg.errorMessage) {\n\t\t\t\t\t\tthis.runState.errorMessage = assistantMsg.errorMessage;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (assistantMsg.usage) {\n\t\t\t\t\t\tthis.runState.totalUsage.input += assistantMsg.usage.input;\n\t\t\t\t\t\tthis.runState.totalUsage.output += assistantMsg.usage.output;\n\t\t\t\t\t\tthis.runState.totalUsage.cacheRead += assistantMsg.usage.cacheRead;\n\t\t\t\t\t\tthis.runState.totalUsage.cacheWrite += assistantMsg.usage.cacheWrite;\n\t\t\t\t\t\tthis.runState.totalUsage.cost.input += assistantMsg.usage.cost.input;\n\t\t\t\t\t\tthis.runState.totalUsage.cost.output += assistantMsg.usage.cost.output;\n\t\t\t\t\t\tthis.runState.totalUsage.cost.cacheRead += assistantMsg.usage.cost.cacheRead;\n\t\t\t\t\t\tthis.runState.totalUsage.cost.cacheWrite += assistantMsg.usage.cost.cacheWrite;\n\t\t\t\t\t\tthis.runState.totalUsage.cost.total += assistantMsg.usage.cost.total;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst content = assistantMsg.content;\n\t\t\t\t\tconst thinkingParts: string[] = [];\n\t\t\t\t\tconst textParts: string[] = [];\n\t\t\t\t\tlet hasToolCalls = false;\n\t\t\t\t\tfor (const part of content) {\n\t\t\t\t\t\tif (isThinkingPart(part)) {\n\t\t\t\t\t\t\tthinkingParts.push(part.thinking);\n\t\t\t\t\t\t} else if (isTextPart(part)) {\n\t\t\t\t\t\t\ttextParts.push(part.text);\n\t\t\t\t\t\t} else if (part.type === \"toolCall\") {\n\t\t\t\t\t\t\thasToolCalls = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst text = textParts.join(\"\\n\");\n\n\t\t\t\t\tfor (const thinking of thinkingParts) {\n\t\t\t\t\t\tlog.logThinking(logCtx, thinking);\n\t\t\t\t\t\tqueue.enqueue(() => ctx.respond(formatProgressEntry(\"thinking\", thinking), false), \"thinking\");\n\t\t\t\t\t}\n\n\t\t\t\t\tif (hasToolCalls && text.trim()) {\n\t\t\t\t\t\tqueue.enqueue(() => ctx.respond(formatProgressEntry(\"assistant\", text), false), \"assistant progress\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (isTurnEndEvent(event)) {\n\t\t\t\tif (isAssistantEventMessage(event.message) && event.toolResults.length === 0) {\n\t\t\t\t\tif (event.message.stopReason === \"error\" || event.message.stopReason === \"aborted\") {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst finalText = event.message.content\n\t\t\t\t\t\t.filter((part): part is { type: \"text\"; text: string } => part.type === \"text\" && !!part.text)\n\t\t\t\t\t\t.map((part) => part.text)\n\t\t\t\t\t\t.join(\"\\n\");\n\n\t\t\t\t\tconst trimmedFinalText = finalText.trim();\n\t\t\t\t\tif (!trimmedFinalText) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (trimmedFinalText === \"[SILENT]\" || trimmedFinalText.startsWith(\"[SILENT]\")) {\n\t\t\t\t\t\tthis.runState.finalOutcome = { kind: \"silent\" };\n\t\t\t\t\t\tthis.memoryLifecycle.noteCompletedAssistantTurn();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tthis.runState.finalOutcome.kind === \"final\" &&\n\t\t\t\t\t\tthis.runState.finalOutcome.text.trim() === trimmedFinalText\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.runState.finalOutcome = { kind: \"final\", text: finalText };\n\t\t\t\t\tthis.memoryLifecycle.noteCompletedAssistantTurn();\n\t\t\t\t\tlog.logResponse(logCtx, finalText);\n\t\t\t\t\tqueue.enqueue(async () => {\n\t\t\t\t\t\tconst delivered = await ctx.respondPlain(finalText);\n\t\t\t\t\t\tif (delivered) {\n\t\t\t\t\t\t\tthis.runState.finalResponseDelivered = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}, \"final response\");\n\t\t\t\t}\n\t\t\t} else if (isAutoCompactionStartEvent(event)) {\n\t\t\t\tlog.logInfo(`Auto-compaction started (reason: ${event.reason})`);\n\t\t\t\tqueue.enqueue(\n\t\t\t\t\t() => ctx.respond(formatProgressEntry(\"assistant\", \"Compacting context...\"), false),\n\t\t\t\t\t\"compaction start\",\n\t\t\t\t);\n\t\t\t} else if (isAutoCompactionEndEvent(event)) {\n\t\t\t\tif (event.result) {\n\t\t\t\t\tlog.logInfo(`Auto-compaction complete: ${event.result.tokensBefore} tokens compacted`);\n\t\t\t\t} else if (event.aborted) {\n\t\t\t\t\tlog.logInfo(\"Auto-compaction aborted\");\n\t\t\t\t}\n\t\t\t} else if (isAutoRetryStartEvent(event)) {\n\t\t\t\tlog.logWarning(`Retrying (${event.attempt}/${event.maxAttempts})`, event.errorMessage);\n\t\t\t\tqueue.enqueue(\n\t\t\t\t\t() =>\n\t\t\t\t\t\tctx.respond(\n\t\t\t\t\t\t\tformatProgressEntry(\"assistant\", `Retrying (${event.attempt}/${event.maxAttempts})...`),\n\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t),\n\t\t\t\t\t\"retry\",\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t}\n}\n\n// ============================================================================\n// Factory\n// ============================================================================\n\nconst channelRunners = new Map<string, AgentRunner>();\n\nexport function getOrCreateRunner(sandboxConfig: SandboxConfig, channelId: string, channelDir: string): AgentRunner {\n\tconst existing = channelRunners.get(channelId);\n\tif (existing) return existing;\n\n\tconst runner = new ChannelRunner(sandboxConfig, channelId, channelDir);\n\tchannelRunners.set(channelId, runner);\n\treturn runner;\n}\n"]}
package/dist/context.d.ts CHANGED
@@ -16,12 +16,28 @@ export interface PipiclawRetrySettings {
16
16
  maxRetries: number;
17
17
  baseDelayMs: number;
18
18
  }
19
+ export interface PipiclawMemoryRecallSettings {
20
+ enabled: boolean;
21
+ maxCandidates: number;
22
+ maxInjected: number;
23
+ maxChars: number;
24
+ rerankWithModel: boolean;
25
+ }
26
+ export interface PipiclawSessionMemorySettings {
27
+ enabled: boolean;
28
+ minTurnsBetweenUpdate: number;
29
+ minToolCallsBetweenUpdate: number;
30
+ forceRefreshBeforeCompact: boolean;
31
+ forceRefreshBeforeNewSession: boolean;
32
+ }
19
33
  export interface PipiclawSettings {
20
34
  defaultProvider?: string;
21
35
  defaultModel?: string;
22
36
  defaultThinkingLevel?: "off" | "minimal" | "low" | "medium" | "high";
23
37
  compaction?: Partial<PipiclawCompactionSettings>;
24
38
  retry?: Partial<PipiclawRetrySettings>;
39
+ memoryRecall?: Partial<PipiclawMemoryRecallSettings>;
40
+ sessionMemory?: Partial<PipiclawSessionMemorySettings>;
25
41
  }
26
42
  /**
27
43
  * Settings manager for pipiclaw.
@@ -38,6 +54,8 @@ export declare class PipiclawSettingsManager {
38
54
  getCompactionEnabled(): boolean;
39
55
  setCompactionEnabled(enabled: boolean): void;
40
56
  getRetrySettings(): PipiclawRetrySettings;
57
+ getMemoryRecallSettings(): PipiclawMemoryRecallSettings;
58
+ getSessionMemorySettings(): PipiclawSessionMemorySettings;
41
59
  getRetryEnabled(): boolean;
42
60
  setRetryEnabled(enabled: boolean): void;
43
61
  getDefaultModel(): string | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
package/dist/context.js CHANGED
@@ -18,6 +18,20 @@ const DEFAULT_RETRY = {
18
18
  maxRetries: 3,
19
19
  baseDelayMs: 2000,
20
20
  };
21
+ const DEFAULT_MEMORY_RECALL = {
22
+ enabled: true,
23
+ maxCandidates: 8,
24
+ maxInjected: 3,
25
+ maxChars: 3500,
26
+ rerankWithModel: false,
27
+ };
28
+ const DEFAULT_SESSION_MEMORY = {
29
+ enabled: true,
30
+ minTurnsBetweenUpdate: 2,
31
+ minToolCallsBetweenUpdate: 4,
32
+ forceRefreshBeforeCompact: true,
33
+ forceRefreshBeforeNewSession: true,
34
+ };
21
35
  /**
22
36
  * Settings manager for pipiclaw.
23
37
  * Stores global settings in the pipiclaw root directory.
@@ -73,6 +87,18 @@ export class PipiclawSettingsManager {
73
87
  ...this.settings.retry,
74
88
  };
75
89
  }
90
+ getMemoryRecallSettings() {
91
+ return {
92
+ ...DEFAULT_MEMORY_RECALL,
93
+ ...this.settings.memoryRecall,
94
+ };
95
+ }
96
+ getSessionMemorySettings() {
97
+ return {
98
+ ...DEFAULT_SESSION_MEMORY,
99
+ ...this.settings.sessionMemory,
100
+ };
101
+ }
76
102
  getRetryEnabled() {
77
103
  return this.settings.retry?.enabled ?? DEFAULT_RETRY.enabled;
78
104
  }
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Context management for pipiclaw.\n *\n * `log.jsonl` and `context.jsonl` are treated as raw cold storage.\n * They are not proactively scanned or loaded as part of the memory model.\n *\n * This module currently provides only PipiclawSettingsManager.\n */\n\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"fs\";\nimport { dirname, join } from \"path\";\n\n// ============================================================================\n// PipiclawSettingsManager - Simple settings for pipiclaw\n// ============================================================================\n\nexport interface PipiclawCompactionSettings {\n\tenabled: boolean;\n\treserveTokens: number;\n\tkeepRecentTokens: number;\n}\n\nexport interface PipiclawRetrySettings {\n\tenabled: boolean;\n\tmaxRetries: number;\n\tbaseDelayMs: number;\n}\n\nexport interface PipiclawSettings {\n\tdefaultProvider?: string;\n\tdefaultModel?: string;\n\tdefaultThinkingLevel?: \"off\" | \"minimal\" | \"low\" | \"medium\" | \"high\";\n\tcompaction?: Partial<PipiclawCompactionSettings>;\n\tretry?: Partial<PipiclawRetrySettings>;\n}\n\nconst DEFAULT_COMPACTION: PipiclawCompactionSettings = {\n\tenabled: true,\n\treserveTokens: 16384,\n\tkeepRecentTokens: 20000,\n};\n\nconst DEFAULT_RETRY: PipiclawRetrySettings = {\n\tenabled: true,\n\tmaxRetries: 3,\n\tbaseDelayMs: 2000,\n};\n\n/**\n * Settings manager for pipiclaw.\n * Stores global settings in the pipiclaw root directory.\n */\nexport class PipiclawSettingsManager {\n\tprivate settingsPath: string;\n\tprivate settings: PipiclawSettings;\n\n\tconstructor(baseDir: string) {\n\t\tthis.settingsPath = join(baseDir, \"settings.json\");\n\t\tthis.settings = this.load();\n\t}\n\n\tprivate load(): PipiclawSettings {\n\t\tif (!existsSync(this.settingsPath)) {\n\t\t\treturn {};\n\t\t}\n\n\t\ttry {\n\t\t\tconst content = readFileSync(this.settingsPath, \"utf-8\");\n\t\t\treturn JSON.parse(content);\n\t\t} catch {\n\t\t\treturn {};\n\t\t}\n\t}\n\n\tprivate save(): void {\n\t\ttry {\n\t\t\tconst dir = dirname(this.settingsPath);\n\t\t\tif (!existsSync(dir)) {\n\t\t\t\tmkdirSync(dir, { recursive: true });\n\t\t\t}\n\t\t\twriteFileSync(this.settingsPath, JSON.stringify(this.settings, null, 2), \"utf-8\");\n\t\t} catch (error) {\n\t\t\tconsole.error(`Warning: Could not save settings file: ${error}`);\n\t\t}\n\t}\n\n\treload(): void {\n\t\tthis.settings = this.load();\n\t}\n\n\tgetCompactionSettings(): PipiclawCompactionSettings {\n\t\treturn {\n\t\t\t...DEFAULT_COMPACTION,\n\t\t\t...this.settings.compaction,\n\t\t};\n\t}\n\n\tgetCompactionEnabled(): boolean {\n\t\treturn this.settings.compaction?.enabled ?? DEFAULT_COMPACTION.enabled;\n\t}\n\n\tsetCompactionEnabled(enabled: boolean): void {\n\t\tthis.settings.compaction = { ...this.settings.compaction, enabled };\n\t\tthis.save();\n\t}\n\n\tgetRetrySettings(): PipiclawRetrySettings {\n\t\treturn {\n\t\t\t...DEFAULT_RETRY,\n\t\t\t...this.settings.retry,\n\t\t};\n\t}\n\n\tgetRetryEnabled(): boolean {\n\t\treturn this.settings.retry?.enabled ?? DEFAULT_RETRY.enabled;\n\t}\n\n\tsetRetryEnabled(enabled: boolean): void {\n\t\tthis.settings.retry = { ...this.settings.retry, enabled };\n\t\tthis.save();\n\t}\n\n\tgetDefaultModel(): string | undefined {\n\t\treturn this.settings.defaultModel;\n\t}\n\n\tgetDefaultProvider(): string | undefined {\n\t\treturn this.settings.defaultProvider;\n\t}\n\n\tsetDefaultModelAndProvider(provider: string, modelId: string): void {\n\t\tthis.settings.defaultProvider = provider;\n\t\tthis.settings.defaultModel = modelId;\n\t\tthis.save();\n\t}\n\n\tgetDefaultThinkingLevel(): string {\n\t\treturn this.settings.defaultThinkingLevel || \"off\";\n\t}\n\n\tsetDefaultThinkingLevel(level: string): void {\n\t\tthis.settings.defaultThinkingLevel = level as PipiclawSettings[\"defaultThinkingLevel\"];\n\t\tthis.save();\n\t}\n\n\t// Compatibility methods for AgentSession\n\tgetSteeringMode(): \"all\" | \"one-at-a-time\" {\n\t\treturn \"one-at-a-time\";\n\t}\n\n\tsetSteeringMode(_mode: \"all\" | \"one-at-a-time\"): void {\n\t\t// No-op\n\t}\n\n\tgetFollowUpMode(): \"all\" | \"one-at-a-time\" {\n\t\treturn \"one-at-a-time\";\n\t}\n\n\tsetFollowUpMode(_mode: \"all\" | \"one-at-a-time\"): void {\n\t\t// No-op\n\t}\n\n\tgetHookPaths(): string[] {\n\t\treturn [];\n\t}\n\n\tgetHookTimeout(): number {\n\t\treturn 30000;\n\t}\n\n\t// Image settings\n\tgetImageAutoResize(): boolean {\n\t\treturn false;\n\t}\n\n\tsetImageAutoResize(_enabled: boolean): void {\n\t\t// No-op\n\t}\n\n\tgetBlockImages(): boolean {\n\t\treturn false;\n\t}\n\n\tsetBlockImages(_blocked: boolean): void {\n\t\t// No-op\n\t}\n\n\tgetShowImages(): boolean {\n\t\treturn false;\n\t}\n\n\tsetShowImages(_show: boolean): void {\n\t\t// No-op\n\t}\n\n\t// Compaction details\n\tgetCompactionReserveTokens(): number {\n\t\treturn DEFAULT_COMPACTION.reserveTokens;\n\t}\n\n\tgetCompactionKeepRecentTokens(): number {\n\t\treturn DEFAULT_COMPACTION.keepRecentTokens;\n\t}\n\n\tgetBranchSummarySettings(): { reserveTokens: number } {\n\t\treturn { reserveTokens: 16384 };\n\t}\n\n\t// Thinking\n\tgetHideThinkingBlock(): boolean {\n\t\treturn false;\n\t}\n\n\tsetHideThinkingBlock(_hide: boolean): void {\n\t\t// No-op\n\t}\n\n\tgetThinkingBudgets(): undefined {\n\t\treturn undefined;\n\t}\n\n\t// Shell\n\tgetShellPath(): string | undefined {\n\t\treturn undefined;\n\t}\n\n\tsetShellPath(_path: string | undefined): void {\n\t\t// No-op\n\t}\n\n\tgetShellCommandPrefix(): string | undefined {\n\t\treturn undefined;\n\t}\n\n\tsetShellCommandPrefix(_prefix: string | undefined): void {\n\t\t// No-op\n\t}\n\n\t// Misc settings stubs\n\tgetQuietStartup(): boolean {\n\t\treturn true;\n\t}\n\n\tsetQuietStartup(_quiet: boolean): void {\n\t\t// No-op\n\t}\n\n\tgetCollapseChangelog(): boolean {\n\t\treturn true;\n\t}\n\n\tsetCollapseChangelog(_collapse: boolean): void {\n\t\t// No-op\n\t}\n\n\tgetTransport(): string {\n\t\treturn \"stdio\";\n\t}\n\n\tsetTransport(_transport: string): void {\n\t\t// No-op\n\t}\n\n\tgetTheme(): string | undefined {\n\t\treturn undefined;\n\t}\n\n\tsetTheme(_theme: string): void {\n\t\t// No-op\n\t}\n\n\tgetPackages(): unknown[] {\n\t\treturn [];\n\t}\n\n\tsetPackages(_packages: unknown[]): void {\n\t\t// No-op\n\t}\n\n\tsetProjectPackages(_packages: unknown[]): void {\n\t\t// No-op\n\t}\n\n\tgetExtensionPaths(): string[] {\n\t\treturn [];\n\t}\n\n\tsetExtensionPaths(_paths: string[]): void {\n\t\t// No-op\n\t}\n\n\tsetProjectExtensionPaths(_paths: string[]): void {\n\t\t// No-op\n\t}\n\n\tgetSkillPaths(): string[] {\n\t\treturn [];\n\t}\n\n\tsetSkillPaths(_paths: string[]): void {\n\t\t// No-op\n\t}\n\n\tsetProjectSkillPaths(_paths: string[]): void {\n\t\t// No-op\n\t}\n\n\tgetPromptTemplatePaths(): string[] {\n\t\treturn [];\n\t}\n\n\tsetPromptTemplatePaths(_paths: string[]): void {\n\t\t// No-op\n\t}\n\n\tsetProjectPromptTemplatePaths(_paths: string[]): void {\n\t\t// No-op\n\t}\n\n\tgetThemePaths(): string[] {\n\t\treturn [];\n\t}\n\n\tsetThemePaths(_paths: string[]): void {\n\t\t// No-op\n\t}\n\n\tsetProjectThemePaths(_paths: string[]): void {\n\t\t// No-op\n\t}\n\n\tgetEnableSkillCommands(): boolean {\n\t\treturn false;\n\t}\n\n\tsetEnableSkillCommands(_enabled: boolean): void {\n\t\t// No-op\n\t}\n\n\tgetEnabledModels(): string[] | undefined {\n\t\treturn undefined;\n\t}\n\n\tsetEnabledModels(_patterns: string[] | undefined): void {\n\t\t// No-op\n\t}\n\n\tgetDoubleEscapeAction(): \"none\" {\n\t\treturn \"none\";\n\t}\n\n\tsetDoubleEscapeAction(_action: string): void {\n\t\t// No-op\n\t}\n\n\tgetShowHardwareCursor(): boolean {\n\t\treturn false;\n\t}\n\n\tsetShowHardwareCursor(_enabled: boolean): void {\n\t\t// No-op\n\t}\n\n\tgetClearOnShrink(): boolean {\n\t\treturn false;\n\t}\n\n\tsetClearOnShrink(_enabled: boolean): void {\n\t\t// No-op\n\t}\n\n\tgetEditorPaddingX(): number {\n\t\treturn 0;\n\t}\n\n\tsetEditorPaddingX(_padding: number): void {\n\t\t// No-op\n\t}\n\n\tgetAutocompleteMaxVisible(): number {\n\t\treturn 10;\n\t}\n\n\tsetAutocompleteMaxVisible(_maxVisible: number): void {\n\t\t// No-op\n\t}\n\n\tgetCodeBlockIndent(): string {\n\t\treturn \" \";\n\t}\n\n\tgetLastChangelogVersion(): string | undefined {\n\t\treturn undefined;\n\t}\n\n\tsetLastChangelogVersion(_version: string): void {\n\t\t// No-op\n\t}\n\n\tsetDefaultProvider(_provider: string): void {\n\t\t// No-op\n\t}\n\n\tsetDefaultModel(_modelId: string): void {\n\t\t// No-op\n\t}\n\n\tgetGlobalSettings(): object {\n\t\treturn {};\n\t}\n\n\tgetProjectSettings(): object {\n\t\treturn {};\n\t}\n\n\tapplyOverrides(_overrides: Partial<PipiclawSettings>): void {\n\t\t// No-op\n\t}\n\n\tflush(): Promise<void> {\n\t\treturn Promise.resolve();\n\t}\n\n\tdrainErrors(): unknown[] {\n\t\treturn [];\n\t}\n}\n"]}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AA4CrC,MAAM,kBAAkB,GAA+B;IACtD,OAAO,EAAE,IAAI;IACb,aAAa,EAAE,KAAK;IACpB,gBAAgB,EAAE,KAAK;CACvB,CAAC;AAEF,MAAM,aAAa,GAA0B;IAC5C,OAAO,EAAE,IAAI;IACb,UAAU,EAAE,CAAC;IACb,WAAW,EAAE,IAAI;CACjB,CAAC;AAEF,MAAM,qBAAqB,GAAiC;IAC3D,OAAO,EAAE,IAAI;IACb,aAAa,EAAE,CAAC;IAChB,WAAW,EAAE,CAAC;IACd,QAAQ,EAAE,IAAI;IACd,eAAe,EAAE,KAAK;CACtB,CAAC;AAEF,MAAM,sBAAsB,GAAkC;IAC7D,OAAO,EAAE,IAAI;IACb,qBAAqB,EAAE,CAAC;IACxB,yBAAyB,EAAE,CAAC;IAC5B,yBAAyB,EAAE,IAAI;IAC/B,4BAA4B,EAAE,IAAI;CAClC,CAAC;AAEF;;;GAGG;AACH,MAAM,OAAO,uBAAuB;IAInC,YAAY,OAAe;QAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;QACnD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC;IAEO,IAAI;QACX,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YACpC,OAAO,EAAE,CAAC;QACX,CAAC;QAED,IAAI,CAAC;YACJ,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACzD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5B,CAAC;QAAC,MAAM,CAAC;YACR,OAAO,EAAE,CAAC;QACX,CAAC;IACF,CAAC;IAEO,IAAI;QACX,IAAI,CAAC;YACJ,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACvC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACrC,CAAC;YACD,aAAa,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACnF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,KAAK,CAAC,0CAA0C,KAAK,EAAE,CAAC,CAAC;QAClE,CAAC;IACF,CAAC;IAED,MAAM;QACL,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC;IAED,qBAAqB;QACpB,OAAO;YACN,GAAG,kBAAkB;YACrB,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU;SAC3B,CAAC;IACH,CAAC;IAED,oBAAoB;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,IAAI,kBAAkB,CAAC,OAAO,CAAC;IACxE,CAAC;IAED,oBAAoB,CAAC,OAAgB;QACpC,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,EAAE,CAAC;QACpE,IAAI,CAAC,IAAI,EAAE,CAAC;IACb,CAAC;IAED,gBAAgB;QACf,OAAO;YACN,GAAG,aAAa;YAChB,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK;SACtB,CAAC;IACH,CAAC;IAED,uBAAuB;QACtB,OAAO;YACN,GAAG,qBAAqB;YACxB,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY;SAC7B,CAAC;IACH,CAAC;IAED,wBAAwB;QACvB,OAAO;YACN,GAAG,sBAAsB;YACzB,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa;SAC9B,CAAC;IACH,CAAC;IAED,eAAe;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,IAAI,aAAa,CAAC,OAAO,CAAC;IAC9D,CAAC;IAED,eAAe,CAAC,OAAgB;QAC/B,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC;QAC1D,IAAI,CAAC,IAAI,EAAE,CAAC;IACb,CAAC;IAED,eAAe;QACd,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC;IACnC,CAAC;IAED,kBAAkB;QACjB,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;IACtC,CAAC;IAED,0BAA0B,CAAC,QAAgB,EAAE,OAAe;QAC3D,IAAI,CAAC,QAAQ,CAAC,eAAe,GAAG,QAAQ,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,OAAO,CAAC;QACrC,IAAI,CAAC,IAAI,EAAE,CAAC;IACb,CAAC;IAED,uBAAuB;QACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,oBAAoB,IAAI,KAAK,CAAC;IACpD,CAAC;IAED,uBAAuB,CAAC,KAAa;QACpC,IAAI,CAAC,QAAQ,CAAC,oBAAoB,GAAG,KAAiD,CAAC;QACvF,IAAI,CAAC,IAAI,EAAE,CAAC;IACb,CAAC;IAED,yCAAyC;IACzC,eAAe;QACd,OAAO,eAAe,CAAC;IACxB,CAAC;IAED,eAAe,CAAC,KAA8B;QAC7C,QAAQ;IACT,CAAC;IAED,eAAe;QACd,OAAO,eAAe,CAAC;IACxB,CAAC;IAED,eAAe,CAAC,KAA8B;QAC7C,QAAQ;IACT,CAAC;IAED,YAAY;QACX,OAAO,EAAE,CAAC;IACX,CAAC;IAED,cAAc;QACb,OAAO,KAAK,CAAC;IACd,CAAC;IAED,iBAAiB;IACjB,kBAAkB;QACjB,OAAO,KAAK,CAAC;IACd,CAAC;IAED,kBAAkB,CAAC,QAAiB;QACnC,QAAQ;IACT,CAAC;IAED,cAAc;QACb,OAAO,KAAK,CAAC;IACd,CAAC;IAED,cAAc,CAAC,QAAiB;QAC/B,QAAQ;IACT,CAAC;IAED,aAAa;QACZ,OAAO,KAAK,CAAC;IACd,CAAC;IAED,aAAa,CAAC,KAAc;QAC3B,QAAQ;IACT,CAAC;IAED,qBAAqB;IACrB,0BAA0B;QACzB,OAAO,kBAAkB,CAAC,aAAa,CAAC;IACzC,CAAC;IAED,6BAA6B;QAC5B,OAAO,kBAAkB,CAAC,gBAAgB,CAAC;IAC5C,CAAC;IAED,wBAAwB;QACvB,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;IACjC,CAAC;IAED,WAAW;IACX,oBAAoB;QACnB,OAAO,KAAK,CAAC;IACd,CAAC;IAED,oBAAoB,CAAC,KAAc;QAClC,QAAQ;IACT,CAAC;IAED,kBAAkB;QACjB,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,QAAQ;IACR,YAAY;QACX,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,YAAY,CAAC,KAAyB;QACrC,QAAQ;IACT,CAAC;IAED,qBAAqB;QACpB,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,qBAAqB,CAAC,OAA2B;QAChD,QAAQ;IACT,CAAC;IAED,sBAAsB;IACtB,eAAe;QACd,OAAO,IAAI,CAAC;IACb,CAAC;IAED,eAAe,CAAC,MAAe;QAC9B,QAAQ;IACT,CAAC;IAED,oBAAoB;QACnB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,oBAAoB,CAAC,SAAkB;QACtC,QAAQ;IACT,CAAC;IAED,YAAY;QACX,OAAO,OAAO,CAAC;IAChB,CAAC;IAED,YAAY,CAAC,UAAkB;QAC9B,QAAQ;IACT,CAAC;IAED,QAAQ;QACP,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,QAAQ,CAAC,MAAc;QACtB,QAAQ;IACT,CAAC;IAED,WAAW;QACV,OAAO,EAAE,CAAC;IACX,CAAC;IAED,WAAW,CAAC,SAAoB;QAC/B,QAAQ;IACT,CAAC;IAED,kBAAkB,CAAC,SAAoB;QACtC,QAAQ;IACT,CAAC;IAED,iBAAiB;QAChB,OAAO,EAAE,CAAC;IACX,CAAC;IAED,iBAAiB,CAAC,MAAgB;QACjC,QAAQ;IACT,CAAC;IAED,wBAAwB,CAAC,MAAgB;QACxC,QAAQ;IACT,CAAC;IAED,aAAa;QACZ,OAAO,EAAE,CAAC;IACX,CAAC;IAED,aAAa,CAAC,MAAgB;QAC7B,QAAQ;IACT,CAAC;IAED,oBAAoB,CAAC,MAAgB;QACpC,QAAQ;IACT,CAAC;IAED,sBAAsB;QACrB,OAAO,EAAE,CAAC;IACX,CAAC;IAED,sBAAsB,CAAC,MAAgB;QACtC,QAAQ;IACT,CAAC;IAED,6BAA6B,CAAC,MAAgB;QAC7C,QAAQ;IACT,CAAC;IAED,aAAa;QACZ,OAAO,EAAE,CAAC;IACX,CAAC;IAED,aAAa,CAAC,MAAgB;QAC7B,QAAQ;IACT,CAAC;IAED,oBAAoB,CAAC,MAAgB;QACpC,QAAQ;IACT,CAAC;IAED,sBAAsB;QACrB,OAAO,KAAK,CAAC;IACd,CAAC;IAED,sBAAsB,CAAC,QAAiB;QACvC,QAAQ;IACT,CAAC;IAED,gBAAgB;QACf,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,gBAAgB,CAAC,SAA+B;QAC/C,QAAQ;IACT,CAAC;IAED,qBAAqB;QACpB,OAAO,MAAM,CAAC;IACf,CAAC;IAED,qBAAqB,CAAC,OAAe;QACpC,QAAQ;IACT,CAAC;IAED,qBAAqB;QACpB,OAAO,KAAK,CAAC;IACd,CAAC;IAED,qBAAqB,CAAC,QAAiB;QACtC,QAAQ;IACT,CAAC;IAED,gBAAgB;QACf,OAAO,KAAK,CAAC;IACd,CAAC;IAED,gBAAgB,CAAC,QAAiB;QACjC,QAAQ;IACT,CAAC;IAED,iBAAiB;QAChB,OAAO,CAAC,CAAC;IACV,CAAC;IAED,iBAAiB,CAAC,QAAgB;QACjC,QAAQ;IACT,CAAC;IAED,yBAAyB;QACxB,OAAO,EAAE,CAAC;IACX,CAAC;IAED,yBAAyB,CAAC,WAAmB;QAC5C,QAAQ;IACT,CAAC;IAED,kBAAkB;QACjB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,uBAAuB;QACtB,OAAO,SAAS,CAAC;IAClB,CAAC;IAED,uBAAuB,CAAC,QAAgB;QACvC,QAAQ;IACT,CAAC;IAED,kBAAkB,CAAC,SAAiB;QACnC,QAAQ;IACT,CAAC;IAED,eAAe,CAAC,QAAgB;QAC/B,QAAQ;IACT,CAAC;IAED,iBAAiB;QAChB,OAAO,EAAE,CAAC;IACX,CAAC;IAED,kBAAkB;QACjB,OAAO,EAAE,CAAC;IACX,CAAC;IAED,cAAc,CAAC,UAAqC;QACnD,QAAQ;IACT,CAAC;IAED,KAAK;QACJ,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC;IAED,WAAW;QACV,OAAO,EAAE,CAAC;IACX,CAAC;CACD","sourcesContent":["/**\n * Context management for pipiclaw.\n *\n * `log.jsonl` and `context.jsonl` are treated as raw cold storage.\n * They are not proactively scanned or loaded as part of the memory model.\n *\n * This module currently provides only PipiclawSettingsManager.\n */\n\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"fs\";\nimport { dirname, join } from \"path\";\n\n// ============================================================================\n// PipiclawSettingsManager - Simple settings for pipiclaw\n// ============================================================================\n\nexport interface PipiclawCompactionSettings {\n\tenabled: boolean;\n\treserveTokens: number;\n\tkeepRecentTokens: number;\n}\n\nexport interface PipiclawRetrySettings {\n\tenabled: boolean;\n\tmaxRetries: number;\n\tbaseDelayMs: number;\n}\n\nexport interface PipiclawMemoryRecallSettings {\n\tenabled: boolean;\n\tmaxCandidates: number;\n\tmaxInjected: number;\n\tmaxChars: number;\n\trerankWithModel: boolean;\n}\n\nexport interface PipiclawSessionMemorySettings {\n\tenabled: boolean;\n\tminTurnsBetweenUpdate: number;\n\tminToolCallsBetweenUpdate: number;\n\tforceRefreshBeforeCompact: boolean;\n\tforceRefreshBeforeNewSession: boolean;\n}\n\nexport interface PipiclawSettings {\n\tdefaultProvider?: string;\n\tdefaultModel?: string;\n\tdefaultThinkingLevel?: \"off\" | \"minimal\" | \"low\" | \"medium\" | \"high\";\n\tcompaction?: Partial<PipiclawCompactionSettings>;\n\tretry?: Partial<PipiclawRetrySettings>;\n\tmemoryRecall?: Partial<PipiclawMemoryRecallSettings>;\n\tsessionMemory?: Partial<PipiclawSessionMemorySettings>;\n}\n\nconst DEFAULT_COMPACTION: PipiclawCompactionSettings = {\n\tenabled: true,\n\treserveTokens: 16384,\n\tkeepRecentTokens: 20000,\n};\n\nconst DEFAULT_RETRY: PipiclawRetrySettings = {\n\tenabled: true,\n\tmaxRetries: 3,\n\tbaseDelayMs: 2000,\n};\n\nconst DEFAULT_MEMORY_RECALL: PipiclawMemoryRecallSettings = {\n\tenabled: true,\n\tmaxCandidates: 8,\n\tmaxInjected: 3,\n\tmaxChars: 3500,\n\trerankWithModel: false,\n};\n\nconst DEFAULT_SESSION_MEMORY: PipiclawSessionMemorySettings = {\n\tenabled: true,\n\tminTurnsBetweenUpdate: 2,\n\tminToolCallsBetweenUpdate: 4,\n\tforceRefreshBeforeCompact: true,\n\tforceRefreshBeforeNewSession: true,\n};\n\n/**\n * Settings manager for pipiclaw.\n * Stores global settings in the pipiclaw root directory.\n */\nexport class PipiclawSettingsManager {\n\tprivate settingsPath: string;\n\tprivate settings: PipiclawSettings;\n\n\tconstructor(baseDir: string) {\n\t\tthis.settingsPath = join(baseDir, \"settings.json\");\n\t\tthis.settings = this.load();\n\t}\n\n\tprivate load(): PipiclawSettings {\n\t\tif (!existsSync(this.settingsPath)) {\n\t\t\treturn {};\n\t\t}\n\n\t\ttry {\n\t\t\tconst content = readFileSync(this.settingsPath, \"utf-8\");\n\t\t\treturn JSON.parse(content);\n\t\t} catch {\n\t\t\treturn {};\n\t\t}\n\t}\n\n\tprivate save(): void {\n\t\ttry {\n\t\t\tconst dir = dirname(this.settingsPath);\n\t\t\tif (!existsSync(dir)) {\n\t\t\t\tmkdirSync(dir, { recursive: true });\n\t\t\t}\n\t\t\twriteFileSync(this.settingsPath, JSON.stringify(this.settings, null, 2), \"utf-8\");\n\t\t} catch (error) {\n\t\t\tconsole.error(`Warning: Could not save settings file: ${error}`);\n\t\t}\n\t}\n\n\treload(): void {\n\t\tthis.settings = this.load();\n\t}\n\n\tgetCompactionSettings(): PipiclawCompactionSettings {\n\t\treturn {\n\t\t\t...DEFAULT_COMPACTION,\n\t\t\t...this.settings.compaction,\n\t\t};\n\t}\n\n\tgetCompactionEnabled(): boolean {\n\t\treturn this.settings.compaction?.enabled ?? DEFAULT_COMPACTION.enabled;\n\t}\n\n\tsetCompactionEnabled(enabled: boolean): void {\n\t\tthis.settings.compaction = { ...this.settings.compaction, enabled };\n\t\tthis.save();\n\t}\n\n\tgetRetrySettings(): PipiclawRetrySettings {\n\t\treturn {\n\t\t\t...DEFAULT_RETRY,\n\t\t\t...this.settings.retry,\n\t\t};\n\t}\n\n\tgetMemoryRecallSettings(): PipiclawMemoryRecallSettings {\n\t\treturn {\n\t\t\t...DEFAULT_MEMORY_RECALL,\n\t\t\t...this.settings.memoryRecall,\n\t\t};\n\t}\n\n\tgetSessionMemorySettings(): PipiclawSessionMemorySettings {\n\t\treturn {\n\t\t\t...DEFAULT_SESSION_MEMORY,\n\t\t\t...this.settings.sessionMemory,\n\t\t};\n\t}\n\n\tgetRetryEnabled(): boolean {\n\t\treturn this.settings.retry?.enabled ?? DEFAULT_RETRY.enabled;\n\t}\n\n\tsetRetryEnabled(enabled: boolean): void {\n\t\tthis.settings.retry = { ...this.settings.retry, enabled };\n\t\tthis.save();\n\t}\n\n\tgetDefaultModel(): string | undefined {\n\t\treturn this.settings.defaultModel;\n\t}\n\n\tgetDefaultProvider(): string | undefined {\n\t\treturn this.settings.defaultProvider;\n\t}\n\n\tsetDefaultModelAndProvider(provider: string, modelId: string): void {\n\t\tthis.settings.defaultProvider = provider;\n\t\tthis.settings.defaultModel = modelId;\n\t\tthis.save();\n\t}\n\n\tgetDefaultThinkingLevel(): string {\n\t\treturn this.settings.defaultThinkingLevel || \"off\";\n\t}\n\n\tsetDefaultThinkingLevel(level: string): void {\n\t\tthis.settings.defaultThinkingLevel = level as PipiclawSettings[\"defaultThinkingLevel\"];\n\t\tthis.save();\n\t}\n\n\t// Compatibility methods for AgentSession\n\tgetSteeringMode(): \"all\" | \"one-at-a-time\" {\n\t\treturn \"one-at-a-time\";\n\t}\n\n\tsetSteeringMode(_mode: \"all\" | \"one-at-a-time\"): void {\n\t\t// No-op\n\t}\n\n\tgetFollowUpMode(): \"all\" | \"one-at-a-time\" {\n\t\treturn \"one-at-a-time\";\n\t}\n\n\tsetFollowUpMode(_mode: \"all\" | \"one-at-a-time\"): void {\n\t\t// No-op\n\t}\n\n\tgetHookPaths(): string[] {\n\t\treturn [];\n\t}\n\n\tgetHookTimeout(): number {\n\t\treturn 30000;\n\t}\n\n\t// Image settings\n\tgetImageAutoResize(): boolean {\n\t\treturn false;\n\t}\n\n\tsetImageAutoResize(_enabled: boolean): void {\n\t\t// No-op\n\t}\n\n\tgetBlockImages(): boolean {\n\t\treturn false;\n\t}\n\n\tsetBlockImages(_blocked: boolean): void {\n\t\t// No-op\n\t}\n\n\tgetShowImages(): boolean {\n\t\treturn false;\n\t}\n\n\tsetShowImages(_show: boolean): void {\n\t\t// No-op\n\t}\n\n\t// Compaction details\n\tgetCompactionReserveTokens(): number {\n\t\treturn DEFAULT_COMPACTION.reserveTokens;\n\t}\n\n\tgetCompactionKeepRecentTokens(): number {\n\t\treturn DEFAULT_COMPACTION.keepRecentTokens;\n\t}\n\n\tgetBranchSummarySettings(): { reserveTokens: number } {\n\t\treturn { reserveTokens: 16384 };\n\t}\n\n\t// Thinking\n\tgetHideThinkingBlock(): boolean {\n\t\treturn false;\n\t}\n\n\tsetHideThinkingBlock(_hide: boolean): void {\n\t\t// No-op\n\t}\n\n\tgetThinkingBudgets(): undefined {\n\t\treturn undefined;\n\t}\n\n\t// Shell\n\tgetShellPath(): string | undefined {\n\t\treturn undefined;\n\t}\n\n\tsetShellPath(_path: string | undefined): void {\n\t\t// No-op\n\t}\n\n\tgetShellCommandPrefix(): string | undefined {\n\t\treturn undefined;\n\t}\n\n\tsetShellCommandPrefix(_prefix: string | undefined): void {\n\t\t// No-op\n\t}\n\n\t// Misc settings stubs\n\tgetQuietStartup(): boolean {\n\t\treturn true;\n\t}\n\n\tsetQuietStartup(_quiet: boolean): void {\n\t\t// No-op\n\t}\n\n\tgetCollapseChangelog(): boolean {\n\t\treturn true;\n\t}\n\n\tsetCollapseChangelog(_collapse: boolean): void {\n\t\t// No-op\n\t}\n\n\tgetTransport(): string {\n\t\treturn \"stdio\";\n\t}\n\n\tsetTransport(_transport: string): void {\n\t\t// No-op\n\t}\n\n\tgetTheme(): string | undefined {\n\t\treturn undefined;\n\t}\n\n\tsetTheme(_theme: string): void {\n\t\t// No-op\n\t}\n\n\tgetPackages(): unknown[] {\n\t\treturn [];\n\t}\n\n\tsetPackages(_packages: unknown[]): void {\n\t\t// No-op\n\t}\n\n\tsetProjectPackages(_packages: unknown[]): void {\n\t\t// No-op\n\t}\n\n\tgetExtensionPaths(): string[] {\n\t\treturn [];\n\t}\n\n\tsetExtensionPaths(_paths: string[]): void {\n\t\t// No-op\n\t}\n\n\tsetProjectExtensionPaths(_paths: string[]): void {\n\t\t// No-op\n\t}\n\n\tgetSkillPaths(): string[] {\n\t\treturn [];\n\t}\n\n\tsetSkillPaths(_paths: string[]): void {\n\t\t// No-op\n\t}\n\n\tsetProjectSkillPaths(_paths: string[]): void {\n\t\t// No-op\n\t}\n\n\tgetPromptTemplatePaths(): string[] {\n\t\treturn [];\n\t}\n\n\tsetPromptTemplatePaths(_paths: string[]): void {\n\t\t// No-op\n\t}\n\n\tsetProjectPromptTemplatePaths(_paths: string[]): void {\n\t\t// No-op\n\t}\n\n\tgetThemePaths(): string[] {\n\t\treturn [];\n\t}\n\n\tsetThemePaths(_paths: string[]): void {\n\t\t// No-op\n\t}\n\n\tsetProjectThemePaths(_paths: string[]): void {\n\t\t// No-op\n\t}\n\n\tgetEnableSkillCommands(): boolean {\n\t\treturn false;\n\t}\n\n\tsetEnableSkillCommands(_enabled: boolean): void {\n\t\t// No-op\n\t}\n\n\tgetEnabledModels(): string[] | undefined {\n\t\treturn undefined;\n\t}\n\n\tsetEnabledModels(_patterns: string[] | undefined): void {\n\t\t// No-op\n\t}\n\n\tgetDoubleEscapeAction(): \"none\" {\n\t\treturn \"none\";\n\t}\n\n\tsetDoubleEscapeAction(_action: string): void {\n\t\t// No-op\n\t}\n\n\tgetShowHardwareCursor(): boolean {\n\t\treturn false;\n\t}\n\n\tsetShowHardwareCursor(_enabled: boolean): void {\n\t\t// No-op\n\t}\n\n\tgetClearOnShrink(): boolean {\n\t\treturn false;\n\t}\n\n\tsetClearOnShrink(_enabled: boolean): void {\n\t\t// No-op\n\t}\n\n\tgetEditorPaddingX(): number {\n\t\treturn 0;\n\t}\n\n\tsetEditorPaddingX(_padding: number): void {\n\t\t// No-op\n\t}\n\n\tgetAutocompleteMaxVisible(): number {\n\t\treturn 10;\n\t}\n\n\tsetAutocompleteMaxVisible(_maxVisible: number): void {\n\t\t// No-op\n\t}\n\n\tgetCodeBlockIndent(): string {\n\t\treturn \" \";\n\t}\n\n\tgetLastChangelogVersion(): string | undefined {\n\t\treturn undefined;\n\t}\n\n\tsetLastChangelogVersion(_version: string): void {\n\t\t// No-op\n\t}\n\n\tsetDefaultProvider(_provider: string): void {\n\t\t// No-op\n\t}\n\n\tsetDefaultModel(_modelId: string): void {\n\t\t// No-op\n\t}\n\n\tgetGlobalSettings(): object {\n\t\treturn {};\n\t}\n\n\tgetProjectSettings(): object {\n\t\treturn {};\n\t}\n\n\tapplyOverrides(_overrides: Partial<PipiclawSettings>): void {\n\t\t// No-op\n\t}\n\n\tflush(): Promise<void> {\n\t\treturn Promise.resolve();\n\t}\n\n\tdrainErrors(): unknown[] {\n\t\treturn [];\n\t}\n}\n"]}
package/dist/index.d.ts CHANGED
@@ -2,19 +2,23 @@ export { type AgentRunner, getOrCreateRunner } from "./agent.js";
2
2
  export { COMMAND_RESULT_CUSTOM_TYPE, createCommandExtension, type PipiclawCommandExtensionOptions, } from "./command-extension.js";
3
3
  export { type BuiltInCommand, type BuiltInCommandName, parseBuiltInCommand, renderBuiltInHelp } from "./commands.js";
4
4
  export { getAgentConfig, getApiKeyForModel, getSoul, loadPipiclawSkills, } from "./config-loader.js";
5
- export { type PipiclawSettings, PipiclawSettingsManager } from "./context.js";
5
+ export { type PipiclawMemoryRecallSettings, type PipiclawSessionMemorySettings, type PipiclawSettings, PipiclawSettingsManager, } from "./context.js";
6
6
  export { createDingTalkContext } from "./delivery.js";
7
7
  export { type BusyMessageMode, DingTalkBot, type DingTalkConfig, type DingTalkContext, type DingTalkEvent, type DingTalkHandler, } from "./dingtalk.js";
8
8
  export { createEventsWatcher, EventsWatcher, type ImmediateEvent, type OneShotEvent, type PeriodicEvent, type ScheduledEvent, } from "./events.js";
9
+ export { type BuildMemoryCandidatesOptions, buildMemoryCandidates, type MemoryCandidate, } from "./memory-candidates.js";
9
10
  export { type BackgroundMaintenanceResult, type ConsolidationRunOptions, type InlineConsolidationResult, runBackgroundMaintenance, runInlineConsolidation, } from "./memory-consolidation.js";
10
- export { ensureChannelMemoryFiles, ensureChannelMemoryFilesSync } from "./memory-files.js";
11
+ export { ensureChannelMemoryFiles, ensureChannelMemoryFilesSync, getChannelSessionPath, readChannelSession, rewriteChannelSession, } from "./memory-files.js";
11
12
  export { type ConsolidationReason, MemoryLifecycle, type MemoryLifecycleOptions } from "./memory-lifecycle.js";
13
+ export { type RecalledMemory, type RecallRequest, type RecallResult, recallRelevantMemory, } from "./memory-recall.js";
12
14
  export { findExactModelReferenceMatch, formatModelList, formatModelReference, resolveInitialModel, } from "./model-utils.js";
13
15
  export { APP_HOME_DIR, APP_NAME, AUTH_CONFIG_PATH, CHANNEL_CONFIG_PATH, MODELS_CONFIG_PATH, SETTINGS_CONFIG_PATH, SUB_AGENTS_DIR, SUB_AGENTS_DIR_NAME, WORKSPACE_DIR, } from "./paths.js";
14
16
  export { type AppendSystemPromptOptions, buildAppendSystemPrompt } from "./prompt-builder.js";
15
17
  export { createExecutor, type ExecOptions, type ExecResult, type Executor, parseSandboxArg, type SandboxConfig, validateSandbox, } from "./sandbox.js";
18
+ export { renderSessionMemory, type SessionMemoryState, type SessionMemoryUpdateOptions, updateChannelSessionMemory, } from "./session-memory.js";
19
+ export { runSidecarTask, type SidecarResult, type SidecarTask, } from "./sidecar-worker.js";
16
20
  export { ChannelStore, type LoggedMessage, type LoggedSubAgentRun } from "./store.js";
17
- export { discoverSubAgents, formatSubAgentList, getSubAgentsDir, type ResolvedSubAgentConfig, resolveSubAgentConfig, type SubAgentConfig, type SubAgentDiscoveryResult, type SubAgentInvocationOverrides, type SubAgentToolName, } from "./sub-agents.js";
21
+ export { discoverSubAgents, formatSubAgentList, getSubAgentsDir, type ResolvedSubAgentConfig, resolveSubAgentConfig, type SubAgentConfig, type SubAgentContextMode, type SubAgentDiscoveryResult, type SubAgentInvocationOverrides, type SubAgentMemoryMode, type SubAgentToolName, } from "./sub-agents.js";
18
22
  export { type CreatePipiclawToolsOptions, createPipiclawBaseTools, createPipiclawTools, } from "./tools/index.js";
19
23
  export { createSubAgentTool, type SubAgentToolDetails, type SubAgentToolOptions, } from "./tools/subagent.js";
20
24
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EACN,0BAA0B,EAC1B,sBAAsB,EACtB,KAAK,+BAA+B,GACpC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,kBAAkB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACrH,OAAO,EACN,cAAc,EACd,iBAAiB,EACjB,OAAO,EACP,kBAAkB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EACN,KAAK,eAAe,EACpB,WAAW,EACX,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,eAAe,GACpB,MAAM,eAAe,CAAC;AACvB,OAAO,EACN,mBAAmB,EACnB,aAAa,EACb,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,cAAc,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EACN,KAAK,2BAA2B,EAChC,KAAK,uBAAuB,EAC5B,KAAK,yBAAyB,EAC9B,wBAAwB,EACxB,sBAAsB,GACtB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAAE,KAAK,mBAAmB,EAAE,eAAe,EAAE,KAAK,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/G,OAAO,EACN,4BAA4B,EAC5B,eAAe,EACf,oBAAoB,EACpB,mBAAmB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,YAAY,EACZ,QAAQ,EACR,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,EACd,mBAAmB,EACnB,aAAa,GACb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,yBAAyB,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9F,OAAO,EACN,cAAc,EACd,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,QAAQ,EACb,eAAe,EACf,KAAK,aAAa,EAClB,eAAe,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,EACN,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,KAAK,sBAAsB,EAC3B,qBAAqB,EACrB,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAC5B,KAAK,2BAA2B,EAChC,KAAK,gBAAgB,GACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACN,KAAK,0BAA0B,EAC/B,uBAAuB,EACvB,mBAAmB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,kBAAkB,EAClB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,GACxB,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -2,17 +2,21 @@ export { getOrCreateRunner } from "./agent.js";
2
2
  export { COMMAND_RESULT_CUSTOM_TYPE, createCommandExtension, } from "./command-extension.js";
3
3
  export { parseBuiltInCommand, renderBuiltInHelp } from "./commands.js";
4
4
  export { getAgentConfig, getApiKeyForModel, getSoul, loadPipiclawSkills, } from "./config-loader.js";
5
- export { PipiclawSettingsManager } from "./context.js";
5
+ export { PipiclawSettingsManager, } from "./context.js";
6
6
  export { createDingTalkContext } from "./delivery.js";
7
7
  export { DingTalkBot, } from "./dingtalk.js";
8
8
  export { createEventsWatcher, EventsWatcher, } from "./events.js";
9
+ export { buildMemoryCandidates, } from "./memory-candidates.js";
9
10
  export { runBackgroundMaintenance, runInlineConsolidation, } from "./memory-consolidation.js";
10
- export { ensureChannelMemoryFiles, ensureChannelMemoryFilesSync } from "./memory-files.js";
11
+ export { ensureChannelMemoryFiles, ensureChannelMemoryFilesSync, getChannelSessionPath, readChannelSession, rewriteChannelSession, } from "./memory-files.js";
11
12
  export { MemoryLifecycle } from "./memory-lifecycle.js";
13
+ export { recallRelevantMemory, } from "./memory-recall.js";
12
14
  export { findExactModelReferenceMatch, formatModelList, formatModelReference, resolveInitialModel, } from "./model-utils.js";
13
15
  export { APP_HOME_DIR, APP_NAME, AUTH_CONFIG_PATH, CHANNEL_CONFIG_PATH, MODELS_CONFIG_PATH, SETTINGS_CONFIG_PATH, SUB_AGENTS_DIR, SUB_AGENTS_DIR_NAME, WORKSPACE_DIR, } from "./paths.js";
14
16
  export { buildAppendSystemPrompt } from "./prompt-builder.js";
15
17
  export { createExecutor, parseSandboxArg, validateSandbox, } from "./sandbox.js";
18
+ export { renderSessionMemory, updateChannelSessionMemory, } from "./session-memory.js";
19
+ export { runSidecarTask, } from "./sidecar-worker.js";
16
20
  export { ChannelStore } from "./store.js";
17
21
  export { discoverSubAgents, formatSubAgentList, getSubAgentsDir, resolveSubAgentConfig, } from "./sub-agents.js";
18
22
  export { createPipiclawBaseTools, createPipiclawTools, } from "./tools/index.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EACN,0BAA0B,EAC1B,sBAAsB,GAEtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAgD,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACrH,OAAO,EACN,cAAc,EACd,iBAAiB,EACjB,OAAO,EACP,kBAAkB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAyB,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAEN,WAAW,GAKX,MAAM,eAAe,CAAC;AACvB,OAAO,EACN,mBAAmB,EACnB,aAAa,GAKb,MAAM,aAAa,CAAC;AACrB,OAAO,EAIN,wBAAwB,EACxB,sBAAsB,GACtB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,wBAAwB,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,EAA4B,eAAe,EAA+B,MAAM,uBAAuB,CAAC;AAC/G,OAAO,EACN,4BAA4B,EAC5B,eAAe,EACf,oBAAoB,EACpB,mBAAmB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,YAAY,EACZ,QAAQ,EACR,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,EACd,mBAAmB,EACnB,aAAa,GACb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAkC,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9F,OAAO,EACN,cAAc,EAId,eAAe,EAEf,eAAe,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,YAAY,EAA8C,MAAM,YAAY,CAAC;AACtF,OAAO,EACN,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EAEf,qBAAqB,GAKrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAEN,uBAAuB,EACvB,mBAAmB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,kBAAkB,GAGlB,MAAM,qBAAqB,CAAC","sourcesContent":["export { type AgentRunner, getOrCreateRunner } from \"./agent.js\";\nexport {\n\tCOMMAND_RESULT_CUSTOM_TYPE,\n\tcreateCommandExtension,\n\ttype PipiclawCommandExtensionOptions,\n} from \"./command-extension.js\";\nexport { type BuiltInCommand, type BuiltInCommandName, parseBuiltInCommand, renderBuiltInHelp } from \"./commands.js\";\nexport {\n\tgetAgentConfig,\n\tgetApiKeyForModel,\n\tgetSoul,\n\tloadPipiclawSkills,\n} from \"./config-loader.js\";\nexport { type PipiclawSettings, PipiclawSettingsManager } from \"./context.js\";\nexport { createDingTalkContext } from \"./delivery.js\";\nexport {\n\ttype BusyMessageMode,\n\tDingTalkBot,\n\ttype DingTalkConfig,\n\ttype DingTalkContext,\n\ttype DingTalkEvent,\n\ttype DingTalkHandler,\n} from \"./dingtalk.js\";\nexport {\n\tcreateEventsWatcher,\n\tEventsWatcher,\n\ttype ImmediateEvent,\n\ttype OneShotEvent,\n\ttype PeriodicEvent,\n\ttype ScheduledEvent,\n} from \"./events.js\";\nexport {\n\ttype BackgroundMaintenanceResult,\n\ttype ConsolidationRunOptions,\n\ttype InlineConsolidationResult,\n\trunBackgroundMaintenance,\n\trunInlineConsolidation,\n} from \"./memory-consolidation.js\";\nexport { ensureChannelMemoryFiles, ensureChannelMemoryFilesSync } from \"./memory-files.js\";\nexport { type ConsolidationReason, MemoryLifecycle, type MemoryLifecycleOptions } from \"./memory-lifecycle.js\";\nexport {\n\tfindExactModelReferenceMatch,\n\tformatModelList,\n\tformatModelReference,\n\tresolveInitialModel,\n} from \"./model-utils.js\";\nexport {\n\tAPP_HOME_DIR,\n\tAPP_NAME,\n\tAUTH_CONFIG_PATH,\n\tCHANNEL_CONFIG_PATH,\n\tMODELS_CONFIG_PATH,\n\tSETTINGS_CONFIG_PATH,\n\tSUB_AGENTS_DIR,\n\tSUB_AGENTS_DIR_NAME,\n\tWORKSPACE_DIR,\n} from \"./paths.js\";\nexport { type AppendSystemPromptOptions, buildAppendSystemPrompt } from \"./prompt-builder.js\";\nexport {\n\tcreateExecutor,\n\ttype ExecOptions,\n\ttype ExecResult,\n\ttype Executor,\n\tparseSandboxArg,\n\ttype SandboxConfig,\n\tvalidateSandbox,\n} from \"./sandbox.js\";\nexport { ChannelStore, type LoggedMessage, type LoggedSubAgentRun } from \"./store.js\";\nexport {\n\tdiscoverSubAgents,\n\tformatSubAgentList,\n\tgetSubAgentsDir,\n\ttype ResolvedSubAgentConfig,\n\tresolveSubAgentConfig,\n\ttype SubAgentConfig,\n\ttype SubAgentDiscoveryResult,\n\ttype SubAgentInvocationOverrides,\n\ttype SubAgentToolName,\n} from \"./sub-agents.js\";\nexport {\n\ttype CreatePipiclawToolsOptions,\n\tcreatePipiclawBaseTools,\n\tcreatePipiclawTools,\n} from \"./tools/index.js\";\nexport {\n\tcreateSubAgentTool,\n\ttype SubAgentToolDetails,\n\ttype SubAgentToolOptions,\n} from \"./tools/subagent.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EACN,0BAA0B,EAC1B,sBAAsB,GAEtB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAgD,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACrH,OAAO,EACN,cAAc,EACd,iBAAiB,EACjB,OAAO,EACP,kBAAkB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAIN,uBAAuB,GACvB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAEN,WAAW,GAKX,MAAM,eAAe,CAAC;AACvB,OAAO,EACN,mBAAmB,EACnB,aAAa,GAKb,MAAM,aAAa,CAAC;AACrB,OAAO,EAEN,qBAAqB,GAErB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAIN,wBAAwB,EACxB,sBAAsB,GACtB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACN,wBAAwB,EACxB,4BAA4B,EAC5B,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,GACrB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAA4B,eAAe,EAA+B,MAAM,uBAAuB,CAAC;AAC/G,OAAO,EAIN,oBAAoB,GACpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACN,4BAA4B,EAC5B,eAAe,EACf,oBAAoB,EACpB,mBAAmB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,YAAY,EACZ,QAAQ,EACR,gBAAgB,EAChB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,cAAc,EACd,mBAAmB,EACnB,aAAa,GACb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAkC,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9F,OAAO,EACN,cAAc,EAId,eAAe,EAEf,eAAe,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EACN,mBAAmB,EAGnB,0BAA0B,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACN,cAAc,GAGd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAA8C,MAAM,YAAY,CAAC;AACtF,OAAO,EACN,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EAEf,qBAAqB,GAOrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAEN,uBAAuB,EACvB,mBAAmB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACN,kBAAkB,GAGlB,MAAM,qBAAqB,CAAC","sourcesContent":["export { type AgentRunner, getOrCreateRunner } from \"./agent.js\";\nexport {\n\tCOMMAND_RESULT_CUSTOM_TYPE,\n\tcreateCommandExtension,\n\ttype PipiclawCommandExtensionOptions,\n} from \"./command-extension.js\";\nexport { type BuiltInCommand, type BuiltInCommandName, parseBuiltInCommand, renderBuiltInHelp } from \"./commands.js\";\nexport {\n\tgetAgentConfig,\n\tgetApiKeyForModel,\n\tgetSoul,\n\tloadPipiclawSkills,\n} from \"./config-loader.js\";\nexport {\n\ttype PipiclawMemoryRecallSettings,\n\ttype PipiclawSessionMemorySettings,\n\ttype PipiclawSettings,\n\tPipiclawSettingsManager,\n} from \"./context.js\";\nexport { createDingTalkContext } from \"./delivery.js\";\nexport {\n\ttype BusyMessageMode,\n\tDingTalkBot,\n\ttype DingTalkConfig,\n\ttype DingTalkContext,\n\ttype DingTalkEvent,\n\ttype DingTalkHandler,\n} from \"./dingtalk.js\";\nexport {\n\tcreateEventsWatcher,\n\tEventsWatcher,\n\ttype ImmediateEvent,\n\ttype OneShotEvent,\n\ttype PeriodicEvent,\n\ttype ScheduledEvent,\n} from \"./events.js\";\nexport {\n\ttype BuildMemoryCandidatesOptions,\n\tbuildMemoryCandidates,\n\ttype MemoryCandidate,\n} from \"./memory-candidates.js\";\nexport {\n\ttype BackgroundMaintenanceResult,\n\ttype ConsolidationRunOptions,\n\ttype InlineConsolidationResult,\n\trunBackgroundMaintenance,\n\trunInlineConsolidation,\n} from \"./memory-consolidation.js\";\nexport {\n\tensureChannelMemoryFiles,\n\tensureChannelMemoryFilesSync,\n\tgetChannelSessionPath,\n\treadChannelSession,\n\trewriteChannelSession,\n} from \"./memory-files.js\";\nexport { type ConsolidationReason, MemoryLifecycle, type MemoryLifecycleOptions } from \"./memory-lifecycle.js\";\nexport {\n\ttype RecalledMemory,\n\ttype RecallRequest,\n\ttype RecallResult,\n\trecallRelevantMemory,\n} from \"./memory-recall.js\";\nexport {\n\tfindExactModelReferenceMatch,\n\tformatModelList,\n\tformatModelReference,\n\tresolveInitialModel,\n} from \"./model-utils.js\";\nexport {\n\tAPP_HOME_DIR,\n\tAPP_NAME,\n\tAUTH_CONFIG_PATH,\n\tCHANNEL_CONFIG_PATH,\n\tMODELS_CONFIG_PATH,\n\tSETTINGS_CONFIG_PATH,\n\tSUB_AGENTS_DIR,\n\tSUB_AGENTS_DIR_NAME,\n\tWORKSPACE_DIR,\n} from \"./paths.js\";\nexport { type AppendSystemPromptOptions, buildAppendSystemPrompt } from \"./prompt-builder.js\";\nexport {\n\tcreateExecutor,\n\ttype ExecOptions,\n\ttype ExecResult,\n\ttype Executor,\n\tparseSandboxArg,\n\ttype SandboxConfig,\n\tvalidateSandbox,\n} from \"./sandbox.js\";\nexport {\n\trenderSessionMemory,\n\ttype SessionMemoryState,\n\ttype SessionMemoryUpdateOptions,\n\tupdateChannelSessionMemory,\n} from \"./session-memory.js\";\nexport {\n\trunSidecarTask,\n\ttype SidecarResult,\n\ttype SidecarTask,\n} from \"./sidecar-worker.js\";\nexport { ChannelStore, type LoggedMessage, type LoggedSubAgentRun } from \"./store.js\";\nexport {\n\tdiscoverSubAgents,\n\tformatSubAgentList,\n\tgetSubAgentsDir,\n\ttype ResolvedSubAgentConfig,\n\tresolveSubAgentConfig,\n\ttype SubAgentConfig,\n\ttype SubAgentContextMode,\n\ttype SubAgentDiscoveryResult,\n\ttype SubAgentInvocationOverrides,\n\ttype SubAgentMemoryMode,\n\ttype SubAgentToolName,\n} from \"./sub-agents.js\";\nexport {\n\ttype CreatePipiclawToolsOptions,\n\tcreatePipiclawBaseTools,\n\tcreatePipiclawTools,\n} from \"./tools/index.js\";\nexport {\n\tcreateSubAgentTool,\n\ttype SubAgentToolDetails,\n\ttype SubAgentToolOptions,\n} from \"./tools/subagent.js\";\n"]}