Pi integratsiooni arhitektuur

See dokument kirjeldab, kuidas Mayros integreerib pi-coding-agent ja selle õde pakettidega (pi-ai, pi-agent-core, pi-tui), et võimendada oma AI agendi võimalusi.

Ülevaade

Mayros kasutab pi SDK-d, et manustada AI koodimise agent oma sõnumivahetuse lüüsi arhitektuuri. Selle asemel, et tekitada pi alamprotsessina või kasutada RPC režiimi, impordib ja instantseerib Mayros otse pi AgentSession createAgentSession() kaudu. See manustatud lähenemine pakub:

  • Täielik kontroll sessiooni elutsükli ja sündmuse käsitlemise üle
  • Kohandatud tööriista sisestamine (sõnumivahetus, liivakast, kanalipõhised toimingud)
  • Süsteemi viiba kohandamine kanali/konteksti kohta
  • Sessiooni püsivus hargnemise/kompakteerimise toega
  • Mitme konto auth profiili pööramine failover-iga
  • Pakkuja-agnostiline mudeli vahetamine

Paketi sõltuvused

json
{
  "@mariozechner/pi-agent-core": "0.49.3",
  "@mariozechner/pi-ai": "0.49.3",
  "@mariozechner/pi-coding-agent": "0.49.3",
  "@mariozechner/pi-tui": "0.49.3"
}
PakettEesmärk
pi-aiPõhi LLM abstraktsioonid: Model, streamSimple, sõnumi tüübid, pakkuja API-d
pi-agent-coreAgendi tsükkel, tööriista täitmine, AgentMessage tüübid
pi-coding-agentKõrge taseme SDK: createAgentSession, SessionManager, AuthStorage, ModelRegistry, sisseehitatud tööriistad
pi-tuiTerminali UI komponendid (kasutatakse Mayros kohalikus TUI režiimis)

Failistruktuur

src/agents/
├── pi-embedded-runner.ts          # Taas-ekspordid pi-embedded-runner/ kohalt
├── pi-embedded-runner/
│   ├── run.ts                     # Peamine sissepääs: runEmbeddedPiAgent()
│   ├── run/
│   │   ├── attempt.ts             # Ühe katse loogika sessiooni seadistusega
│   │   ├── params.ts              # RunEmbeddedPiAgentParams tüüp
│   │   ├── payloads.ts            # Ehita vastuse kasulikud koormused käitamise tulemustest
│   │   ├── images.ts              # Visiooni mudeli pildi sisestamine
│   │   └── types.ts               # EmbeddedRunAttemptResult
│   ├── abort.ts                   # Katkestamise vea tuvastamine
│   ├── cache-ttl.ts               # Vahemälu TTL jälgimine konteksti kärpimiseks
│   ├── compact.ts                 # Manuaalne/automaatne kompakteerimise loogika
│   ├── extensions.ts              # Laadi pi laiendused manustatud käitamiste jaoks
│   ├── extra-params.ts            # Pakkujapõhised voo parameetrid
│   ├── google.ts                  # Google/Gemini pöörde järjestuse parandused
│   ├── history.ts                 # Ajaloo piiramine (DM vs grupp)
│   ├── lanes.ts                   # Sessiooni/globaalsed käsuread
│   ├── logger.ts                  # Alamsüsteemi logger
│   ├── model.ts                   # Mudeli lahendus ModelRegistry kaudu
│   ├── runs.ts                    # Aktiivne käitamise jälgimine, katkestamine, järjekord
│   ├── sandbox-info.ts            # Liivakasti info süsteemi viiba jaoks
│   ├── session-manager-cache.ts   # SessionManager instansi vahemällu salvestamine
│   ├── session-manager-init.ts    # Sessiooni faili initsialiseerimine
│   ├── system-prompt.ts           # Süsteemi viiba ehitaja
│   ├── tool-split.ts              # Tööriistade jagamine builtIn vs custom
│   ├── types.ts                   # EmbeddedPiAgentMeta, EmbeddedPiRunResult
│   └── utils.ts                   # ThinkLevel vastendamine, vea kirjeldus
├── pi-embedded-subscribe.ts       # Sessiooni sündmuse tellimus/saatmine
├── pi-embedded-subscribe.types.ts # SubscribeEmbeddedPiSessionParams
├── pi-embedded-subscribe.handlers.ts # Sündmuse käsitseja tehas
├── pi-embedded-subscribe.handlers.lifecycle.ts
├── pi-embedded-subscribe.handlers.types.ts
├── pi-embedded-block-chunker.ts   # Voogedastamise bloki vastuse tükeldamine
├── pi-embedded-messaging.ts       # Sõnumivahetuse tööriista saadetud jälgimine
├── pi-embedded-helpers.ts         # Vea klassifikatsioon, pöörde valideerimine
├── pi-embedded-helpers/           # Abistaja moodulid
├── pi-embedded-utils.ts           # Vormindamise utiliidid
├── pi-tools.ts                    # createMayrosCodingTools()
├── pi-tools.abort.ts              # AbortSignal mähkimine tööriistade jaoks
├── pi-tools.policy.ts             # Tööriista lubatud nimekiri/keeldunimekiri poliitika
├── pi-tools.read.ts               # Lugemise tööriista kohandused
├── pi-tools.schema.ts             # Tööriista skeemi normaliseerimine
├── pi-tools.types.ts              # AnyAgentTool tüübi alias
├── pi-tool-definition-adapter.ts  # AgentTool -> ToolDefinition adapter
├── pi-settings.ts                 # Seadete alistused
├── pi-extensions/                 # Kohandatud pi laiendused
│   ├── compaction-safeguard.ts    # Kaitsemeetme laiendus
│   ├── compaction-safeguard-runtime.ts
│   ├── context-pruning.ts         # Vahemälu-TTL konteksti kärpimise laiendus
│   └── context-pruning/
├── model-auth.ts                  # Auth profiili lahendus
├── auth-profiles.ts               # Profiili pood, jahtumisaeg, failover
├── model-selection.ts             # Vaikimisi mudeli lahendus
├── models-config.ts               # models.json genereerimine
├── model-catalog.ts               # Mudeli kataloogi vahemälu
├── context-window-guard.ts        # Konteksti akna valideerimine
├── failover-error.ts              # FailoverError klass
├── defaults.ts                    # DEFAULT_PROVIDER, DEFAULT_MODEL
├── system-prompt.ts               # buildAgentSystemPrompt()
├── system-prompt-params.ts        # Süsteemi viiba parameetri lahendus
├── system-prompt-report.ts        # Silumise aruande genereerimine
├── tool-summaries.ts              # Tööriista kirjelduse kokkuvõtted
├── tool-policy.ts                 # Tööriista poliitika lahendus
├── transcript-policy.ts           # Transkripti valideerimise poliitika
├── skills.ts                      # Oskuse hetktõmmis/viiba ehitamine
├── skills/                        # Oskuse alamsüsteem
├── sandbox.ts                     # Liivakasti konteksti lahendus
├── sandbox/                       # Liivakasti alamsüsteem
├── channel-tools.ts               # Kanalipõhine tööriista sisestamine
├── mayros-tools.ts              # Mayros-spetsiifilised tööriistad
├── bash-tools.ts                  # exec/process tööriistad
├── apply-patch.ts                 # apply_patch tööriist (OpenAI)
├── tools/                         # Individuaalsed tööriista rakendused
│   ├── browser-tool.ts
│   ├── canvas-tool.ts
│   ├── cron-tool.ts
│   ├── discord-actions*.ts
│   ├── gateway-tool.ts
│   ├── image-tool.ts
│   ├── message-tool.ts
│   ├── nodes-tool.ts
│   ├── session*.ts
│   ├── slack-actions.ts
│   ├── telegram-actions.ts
│   ├── web-*.ts
│   └── whatsapp-actions.ts
└── ...

Põhiintegratsiooni voog

1. Manustatud agendi käitamine

Peamine sissepääsupunkt on runEmbeddedPiAgent() pi-embedded-runner/run.ts failis:

typescript
import { runEmbeddedPiAgent } from "./agents/pi-embedded-runner.js";

const result = await runEmbeddedPiAgent({
  sessionId: "user-123",
  sessionKey: "main:whatsapp:+1234567890",
  sessionFile: "/path/to/session.jsonl",
  workspaceDir: "/path/to/workspace",
  config: mayrosConfig,
  prompt: "Tere, kuidas sul läheb?",
  provider: "anthropic",
  model: "claude-sonnet-4-20250514",
  timeoutMs: 120_000,
  runId: "run-abc",
  onBlockReply: async (payload) => {
    await sendToChannel(payload.text, payload.mediaUrls);
  },
});

2. Sessiooni loomine

runEmbeddedAttempt() sees (mida kutsub runEmbeddedPiAgent()), kasutatakse pi SDK-d:

typescript
import {
  createAgentSession,
  DefaultResourceLoader,
  SessionManager,
  SettingsManager,
} from "@mariozechner/pi-coding-agent";

const resourceLoader = new DefaultResourceLoader({
  cwd: resolvedWorkspace,
  agentDir,
  settingsManager,
  additionalExtensionPaths,
});
await resourceLoader.reload();

const { session } = await createAgentSession({
  cwd: resolvedWorkspace,
  agentDir,
  authStorage: params.authStorage,
  modelRegistry: params.modelRegistry,
  model: params.model,
  thinkingLevel: mapThinkingLevel(params.thinkLevel),
  tools: builtInTools,
  customTools: allCustomTools,
  sessionManager,
  settingsManager,
  resourceLoader,
});

applySystemPromptOverrideToSession(session, systemPromptOverride);

3. Sündmuse tellimus

subscribeEmbeddedPiSession() tellib pi AgentSession sündmusi:

typescript
const subscription = subscribeEmbeddedPiSession({
  session: activeSession,
  runId: params.runId,
  verboseLevel: params.verboseLevel,
  reasoningMode: params.reasoningLevel,
  toolResultFormat: params.toolResultFormat,
  onToolResult: params.onToolResult,
  onReasoningStream: params.onReasoningStream,
  onBlockReply: params.onBlockReply,
  onPartialReply: params.onPartialReply,
  onAgentEvent: params.onAgentEvent,
});

Käsitletud sündmused sisaldavad:

  • message_start / message_end / message_update (voogedastamise tekst/mõtlemine)
  • tool_execution_start / tool_execution_update / tool_execution_end
  • turn_start / turn_end
  • agent_start / agent_end
  • auto_compaction_start / auto_compaction_end

4. Viipamine

Pärast seadistamist viipatakse sessiooni:

typescript
await session.prompt(effectivePrompt, { images: imageResult.images });

SDK käsitseb täielikku agendi tsüklit: saatmine LLM-ile, tööriista kõnede täitmine, vastuste voogedastamine.

Tööriista arhitektuur

Tööriista torujuhe

  1. Baastööriistad: pi codingTools (read, bash, edit, write)
  2. Kohandatud asendused: Mayros asendab bash exec/process-ga, kohandab read/edit/write liivakasti jaoks
  3. Mayros tööriistad: sõnumivahetus, brauser, canvas, sessioonid, cron, gateway jne.
  4. Kanali tööriistad: Discord/Telegram/Slack/WhatsApp-spetsiifilised tegevuse tööriistad
  5. Poliitika filtreerimine: Tööriistad filtreeritud profiili, pakkuja, agendi, grupi, liivakasti poliitikate järgi
  6. Skeemi normaliseerimine: Skeemid puhastatud Gemini/OpenAI kummalistuste jaoks
  7. AbortSignal mähkimine: Tööriistad mähitud, et austada katkestamise signaale

Tööriista definitsiooni adapter

pi-agent-core AgentTool omab erinevat execute signatuuri kui pi-coding-agent ToolDefinition. Adapter pi-tool-definition-adapter.ts failis ületab selle:

typescript
export function toToolDefinitions(tools: AnyAgentTool[]): ToolDefinition[] {
  return tools.map((tool) => ({
    name: tool.name,
    label: tool.label ?? name,
    description: tool.description ?? "",
    parameters: tool.parameters,
    execute: async (toolCallId, params, onUpdate, _ctx, signal) => {
      // pi-coding-agent signatuur erineb pi-agent-core omast
      return await tool.execute(toolCallId, params, signal, onUpdate);
    },
  }));
}

Tööriista jagamise strateegia

splitSdkTools() edastab kõik tööriistad läbi customTools:

typescript
export function splitSdkTools(options: { tools: AnyAgentTool[]; sandboxEnabled: boolean }) {
  return {
    builtInTools: [], // Tühi. Me alistame kõike
    customTools: toToolDefinitions(options.tools),
  };
}

See tagab, et Mayros poliitika filtreerimine, liivakasti integratsioon ja laiendatud tööriistakomplekt jäävad järjepidevaks pakkujate vahel.

Süsteemi viiba konstrueerimine

Süsteemi viip on ehitatud buildAgentSystemPrompt() (system-prompt.ts) abil. See koostab täieliku viiba sektsioonidega, sealhulgas Tooling, Tool Call Style, Safety kaitsemeetmed, Mayros CLI viide, Skills, Docs, Workspace, Sandbox, Messaging, Reply Tags, Voice, Silent Replies, Heartbeats, Runtime metaandmed, pluss Memory ja Reactions kui lubatud, ja valikulised konteksti failid ning lisa süsteemi viiba sisu. Sektsioonid on kärpitud minimaalse viiba režiimi jaoks, mida kasutavad alam-agendid.

Viip rakendatakse pärast sessiooni loomist applySystemPromptOverrideToSession() kaudu:

typescript
const systemPromptOverride = createSystemPromptOverride(appendPrompt);
applySystemPromptOverrideToSession(session, systemPromptOverride);

Sessiooni haldus

Sessiooni failid

Sessioonid on JSONL failid puu struktuuriga (id/parentId linkimine). Pi SessionManager käsitseb püsivust:

typescript
const sessionManager = SessionManager.open(params.sessionFile);

Mayros mähib selle guardSessionManager() abil tööriista tulemuse ohutuse jaoks.

Sessiooni vahemällu salvestamine

session-manager-cache.ts vahemälustab SessionManager instantse, et vältida korduvat faili parserimist:

typescript
await prewarmSessionFile(params.sessionFile);
sessionManager = SessionManager.open(params.sessionFile);
trackSessionManagerAccess(params.sessionFile);

Ajaloo piiramine

limitHistoryTurns() kärpib vestluse ajalugu kanali tüübi (DM vs grupp) põhjal.

Kompakteerimine

Automaatne kompakteerimine käivitub konteksti ületäitumisel. compactEmbeddedPiSessionDirect() käsitseb manuaalset kompakteerimist:

typescript
const compactResult = await compactEmbeddedPiSessionDirect({
  sessionId, sessionFile, provider, model, ...
});

Autentimine ja mudeli lahendus

Auth profiilid

Mayros hoiab auth profiili poodi mitme API võtmega pakkuja kohta:

typescript
const authStore = ensureAuthProfileStore(agentDir, { allowKeychainPrompt: false });
const profileOrder = resolveAuthProfileOrder({ cfg, store: authStore, provider, preferredProfile });

Profiilid pöörlevad ebaõnnestumiste korral jahtumisaja jälgimisega:

typescript
await markAuthProfileFailure({ store, profileId, reason, cfg, agentDir });
const rotated = await advanceAuthProfile();

Mudeli lahendus

typescript
import { resolveModel } from "./pi-embedded-runner/model.js";

const { model, error, authStorage, modelRegistry } = resolveModel(
  provider,
  modelId,
  agentDir,
  config,
);

// Kasutab pi ModelRegistry ja AuthStorage
authStorage.setRuntimeApiKey(model.provider, apiKeyInfo.apiKey);

Failover

FailoverError käivitab mudeli tagasilangemise kui konfigureeritud:

typescript
if (fallbackConfigured && isFailoverErrorMessage(errorText)) {
  throw new FailoverError(errorText, {
    reason: promptFailoverReason ?? "unknown",
    provider,
    model: modelId,
    profileId,
    status: resolveFailoverStatus(promptFailoverReason),
  });
}

Pi laiendused

Mayros laadib kohandatud pi laiendusi spetsialiseeritud käitumise jaoks:

Kompakteerimise kaitsemeede

pi-extensions/compaction-safeguard.ts lisab kaitsemeetmed kompakteerimisele, sealhulgas adaptiivne tokeni eelarvestamine pluss tööriista ebaõnnestumise ja faili operatsiooni kokkuvõtted:

typescript
if (resolveCompactionMode(params.cfg) === "safeguard") {
  setCompactionSafeguardRuntime(params.sessionManager, { maxHistoryShare });
  paths.push(resolvePiExtensionPath("compaction-safeguard"));
}

Konteksti kärpimine

pi-extensions/context-pruning.ts rakendab vahemälu-TTL põhist konteksti kärpimist:

typescript
if (cfg?.agents?.defaults?.contextPruning?.mode === "cache-ttl") {
  setContextPruningRuntime(params.sessionManager, {
    settings,
    contextWindowTokens,
    isToolPrunable,
    lastCacheTouchAt,
  });
  paths.push(resolvePiExtensionPath("context-pruning"));
}

Voogedastamine ja blokivastused

Bloki tükeldamine

EmbeddedBlockChunker haldab voogedastamise teksti diskreetseteks vastuse blokkideks:

typescript
const blockChunker = blockChunking ? new EmbeddedBlockChunker(blockChunking) : null;

Thinking/Final märgendi eemaldamine

Voogedastamise väljund töödeldakse, et eemaldada <think>/<thinking> blokid ja ekstraktida <final> sisu:

typescript
const stripBlockTags = (text: string, state: { thinking: boolean; final: boolean }) => {
  // Eemalda <think>...</think> sisu
  // Kui enforceFinalTag, tagasta ainult <final>...</final> sisu
};

Vastuse direktiivid

Vastuse direktiivid nagu [[media:url]], [[voice]], [[reply:id]] parsitakse ja ekstraktitakse:

typescript
const { text: cleanedText, mediaUrls, audioAsVoice, replyToId } = consumeReplyDirectives(chunk);

Vea käsitsemine

Vea klassifikatsioon

pi-embedded-helpers.ts klassifitseerib vigu sobivaks käsitsemiseks:

typescript
isContextOverflowError(errorText)     // Kontekst liiga suur
isCompactionFailureError(errorText)   // Kompakteerimine ebaõnnestus
isAuthAssistantError(lastAssistant)   // Auth ebaõnnestumine
isRateLimitAssistantError(...)        // Määra piiratud
isFailoverAssistantError(...)         // Peaks failover tegema
classifyFailoverReason(errorText)     // "auth" | "rate_limit" | "quota" | "timeout" | ...

Mõtlemise taseme tagasilangemine

Kui mõtlemise tase ei ole toetatud, langeb tagasi:

typescript
const fallbackThinking = pickFallbackThinkingLevel({
  message: errorText,
  attempted: attemptedThinking,
});
if (fallbackThinking) {
  thinkLevel = fallbackThinking;
  continue;
}

Liivakasti integratsioon

Kui liivakasti režiim on lubatud, on tööriistad ja teed piiratud:

typescript
const sandbox = await resolveSandboxContext({
  config: params.config,
  sessionKey: sandboxSessionKey,
  workspaceDir: resolvedWorkspace,
});

if (sandboxRoot) {
  // Kasuta liivakasti read/edit/write tööriistu
  // Exec käib konteineris
  // Brauser kasutab sillaabi URL-i
}

Pakkujapõhine käsitsemine

Anthropic

  • Keeldumise maagiline stringi puhastamine
  • Pöörde valideerimine järjestikuste rollide jaoks
  • Claude Code parameetri ühilduvus

Google/Gemini

  • Pöörde järjestuse parandused (applyGoogleTurnOrderingFix)
  • Tööriista skeemi sanitiseerimine (sanitizeToolsForGoogle)
  • Sessiooni ajaloo sanitiseerimine (sanitizeSessionHistory)

OpenAI

  • apply_patch tööriist Codex mudelite jaoks
  • Mõtlemise taseme alandamise käsitsemine

TUI integratsioon

Mayros omab ka kohalikku TUI režiimi, mis kasutab pi-tui komponente otse:

typescript
// src/tui/tui.ts
import { ... } from "@mariozechner/pi-tui";

See pakub interaktiivset terminali kogemust, mis on sarnane pi natiivsele režiimile.

Peamised erinevused Pi CLI-st

AspektPi CLIMayros manustatud
Käivitaminepi käsk / RPCSDK läbi createAgentSession()
TööriistadVaikimisi koodimise tööriistadKohandatud Mayros tööriistakomplekt
Süsteemi viipAGENTS.md + viibadDünaamiline kanali/konteksti kohta
Sessiooni salvestamine~/.pi/agent/sessions/~/.mayros/agents/<agentId>/sessions/ (või $MAYROS_STATE_DIR/agents/<agentId>/sessions/)
AuthÜks krediitMitme profiili pööramisega
LaiendusedLaaditud kettaltProgrammaatiline + ketta teed
Sündmuse käsitsemineTUI renderdamineTagasihelistus-põhine (onBlockReply jne.)

Tulevased kaalutlused

Alad võimalikuks ümbertöötamiseks:

  1. Tööriista signatuuri joondamine: Praegu kohandatakse pi-agent-core ja pi-coding-agent signatuuride vahel
  2. Sessiooni haldaja mähkimine: guardSessionManager lisab ohutust, kuid suurendab keerukust
  3. Laienduse laadimine: Võiks kasutada pi ResourceLoader rohkem otse
  4. Voogedastamise käsitseja keerukus: subscribeEmbeddedPiSession on kasvanud suureks
  5. Pakkuja kummalistused: Palju pakkujapõhiseid koodi teid, mida pi võiks potentsiaalselt käsitseda

Testid

Kõik olemasolevad testid, mis katavad pi integratsiooni ja selle laiendusi:

  • src/agents/pi-embedded-block-chunker.test.ts
  • src/agents/pi-embedded-helpers.buildbootstrapcontextfiles.test.ts
  • src/agents/pi-embedded-helpers.classifyfailoverreason.test.ts
  • src/agents/pi-embedded-helpers.downgradeopenai-reasoning.test.ts
  • src/agents/pi-embedded-helpers.formatassistanterrortext.test.ts
  • src/agents/pi-embedded-helpers.formatrawassistanterrorforui.test.ts
  • src/agents/pi-embedded-helpers.image-dimension-error.test.ts
  • src/agents/pi-embedded-helpers.image-size-error.test.ts
  • src/agents/pi-embedded-helpers.isautherrormessage.test.ts
  • src/agents/pi-embedded-helpers.isbillingerrormessage.test.ts
  • src/agents/pi-embedded-helpers.iscloudcodeassistformaterror.test.ts
  • src/agents/pi-embedded-helpers.iscompactionfailureerror.test.ts
  • src/agents/pi-embedded-helpers.iscontextoverflowerror.test.ts
  • src/agents/pi-embedded-helpers.isfailovererrormessage.test.ts
  • src/agents/pi-embedded-helpers.islikelycontextoverflowerror.test.ts
  • src/agents/pi-embedded-helpers.ismessagingtoolduplicate.test.ts
  • src/agents/pi-embedded-helpers.messaging-duplicate.test.ts
  • src/agents/pi-embedded-helpers.normalizetextforcomparison.test.ts
  • src/agents/pi-embedded-helpers.resolvebootstrapmaxchars.test.ts
  • src/agents/pi-embedded-helpers.sanitize-session-messages-images.keeps-tool-call-tool-result-ids-unchanged.test.ts
  • src/agents/pi-embedded-helpers.sanitize-session-messages-images.removes-empty-assistant-text-blocks-but-preserves.test.ts
  • src/agents/pi-embedded-helpers.sanitizegoogleturnordering.test.ts
  • src/agents/pi-embedded-helpers.sanitizesessionmessagesimages-thought-signature-stripping.test.ts
  • src/agents/pi-embedded-helpers.sanitizetoolcallid.test.ts
  • src/agents/pi-embedded-helpers.sanitizeuserfacingtext.test.ts
  • src/agents/pi-embedded-helpers.stripthoughtsignatures.test.ts
  • src/agents/pi-embedded-helpers.validate-turns.test.ts
  • src/agents/pi-embedded-runner-extraparams.live.test.ts (live)
  • src/agents/pi-embedded-runner-extraparams.test.ts
  • src/agents/pi-embedded-runner.applygoogleturnorderingfix.test.ts
  • src/agents/pi-embedded-runner.buildembeddedsandboxinfo.test.ts
  • src/agents/pi-embedded-runner.createsystempromptoverride.test.ts
  • src/agents/pi-embedded-runner.get-dm-history-limit-from-session-key.falls-back-provider-default-per-dm-not.test.ts
  • src/agents/pi-embedded-runner.get-dm-history-limit-from-session-key.returns-undefined-sessionkey-is-undefined.test.ts
  • src/agents/pi-embedded-runner.google-sanitize-thinking.test.ts
  • src/agents/pi-embedded-runner.guard.test.ts
  • src/agents/pi-embedded-runner.limithistoryturns.test.ts
  • src/agents/pi-embedded-runner.resolvesessionagentids.test.ts
  • src/agents/pi-embedded-runner.run-embedded-pi-agent.auth-profile-rotation.test.ts
  • src/agents/pi-embedded-runner.sanitize-session-history.test.ts
  • src/agents/pi-embedded-runner.splitsdktools.test.ts
  • src/agents/pi-embedded-runner.test.ts
  • src/agents/pi-embedded-subscribe.code-span-awareness.test.ts
  • src/agents/pi-embedded-subscribe.reply-tags.test.ts
  • src/agents/pi-embedded-subscribe.subscribe-embedded-pi-session.calls-onblockreplyflush-before-tool-execution-start-preserve.test.ts
  • src/agents/pi-embedded-subscribe.subscribe-embedded-pi-session.does-not-append-text-end-content-is.test.ts
  • src/agents/pi-embedded-subscribe.subscribe-embedded-pi-session.does-not-call-onblockreplyflush-callback-is-not.test.ts
  • src/agents/pi-embedded-subscribe.subscribe-embedded-pi-session.does-not-duplicate-text-end-repeats-full.test.ts
  • src/agents/pi-embedded-subscribe.subscribe-embedded-pi-session.does-not-emit-duplicate-block-replies-text.test.ts
  • src/agents/pi-embedded-subscribe.subscribe-embedded-pi-session.emits-block-replies-text-end-does-not.test.ts
  • src/agents/pi-embedded-subscribe.subscribe-embedded-pi-session.emits-reasoning-as-separate-message-enabled.test.ts
  • src/agents/pi-embedded-subscribe.subscribe-embedded-pi-session.filters-final-suppresses-output-without-start-tag.test.ts
  • src/agents/pi-embedded-subscribe.subscribe-embedded-pi-session.includes-canvas-action-metadata-tool-summaries.test.ts
  • src/agents/pi-embedded-subscribe.subscribe-embedded-pi-session.keeps-assistanttexts-final-answer-block-replies-are.test.ts
  • src/agents/pi-embedded-subscribe.subscribe-embedded-pi-session.keeps-indented-fenced-blocks-intact.test.ts
  • src/agents/pi-embedded-subscribe.subscribe-embedded-pi-session.reopens-fenced-blocks-splitting-inside-them.test.ts
  • src/agents/pi-embedded-subscribe.subscribe-embedded-pi-session.splits-long-single-line-fenced-blocks-reopen.test.ts
  • src/agents/pi-embedded-subscribe.subscribe-embedded-pi-session.streams-soft-chunks-paragraph-preference.test.ts
  • src/agents/pi-embedded-subscribe.subscribe-embedded-pi-session.subscribeembeddedpisession.test.ts
  • src/agents/pi-embedded-subscribe.subscribe-embedded-pi-session.suppresses-message-end-block-replies-message-tool.test.ts
  • src/agents/pi-embedded-subscribe.subscribe-embedded-pi-session.waits-multiple-compaction-retries-before-resolving.test.ts
  • src/agents/pi-embedded-subscribe.tools.test.ts
  • src/agents/pi-embedded-utils.test.ts
  • src/agents/pi-extensions/compaction-safeguard.test.ts
  • src/agents/pi-extensions/context-pruning.test.ts
  • src/agents/pi-settings.test.ts
  • src/agents/pi-tool-definition-adapter.test.ts
  • src/agents/pi-tools-agent-config.test.ts
  • src/agents/pi-tools.create-mayros-coding-tools.adds-claude-style-aliases-schemas-without-dropping-b.test.ts
  • src/agents/pi-tools.create-mayros-coding-tools.adds-claude-style-aliases-schemas-without-dropping-d.test.ts
  • src/agents/pi-tools.create-mayros-coding-tools.adds-claude-style-aliases-schemas-without-dropping-f.test.ts
  • src/agents/pi-tools.create-mayros-coding-tools.adds-claude-style-aliases-schemas-without-dropping.test.ts
  • src/agents/pi-tools.policy.test.ts
  • src/agents/pi-tools.safe-bins.test.ts
  • src/agents/pi-tools.workspace-paths.test.ts