ShellPilot.Format.ps1xml

<?xml version="1.0" encoding="utf-8"?>
<!--
    Format views for ShellPilot output objects. Each public cmdlet that emits a
    structured record tags it with a PSTypeName (ShellPilot.*); the views below
    give those records a readable default table (or list) so Get-ShpModel and the
    other cmdlets print nicely without an explicit Format-Table. Members not
    listed here (for example the Raw model record, or a usage record''s full
    Prompt text) remain on the object and are reachable with Select-Object or
    Format-List *.
-->
<Configuration>
  <ViewDefinitions>

    <!-- Invoke-Shp result. A list view that shows the answer once with the key
         metadata; the bulky History/Raw/Headers members (History repeats the
         answer text, so the default object dump printed it twice) stay on the
         object and are reachable with Select-Object / Format-List *. -->
    <View>
      <Name>ShellPilot.Result</Name>
      <ViewSelectedBy>
        <TypeName>ShellPilot.Result</TypeName>
      </ViewSelectedBy>
      <ListControl>
        <ListEntries>
          <ListEntry>
            <ListItems>
              <ListItem><PropertyName>Model</PropertyName></ListItem>
              <ListItem><PropertyName>Prompt</PropertyName></ListItem>
              <ListItem><PropertyName>FinishReason</PropertyName></ListItem>
              <ListItem><PropertyName>ApiMode</PropertyName></ListItem>
              <ListItem><PropertyName>Iterations</PropertyName></ListItem>
              <ListItem><Label>ToolCalls</Label><ScriptBlock>@($_.ToolCalls).Count</ScriptBlock></ListItem>
              <ListItem><Label>PromptTokens</Label><ScriptBlock>$_.Usage.PromptTokens</ScriptBlock></ListItem>
              <ListItem><Label>CompletionTokens</Label><ScriptBlock>$_.Usage.CompletionTokens</ScriptBlock></ListItem>
              <ListItem><Label>TotalTokens</Label><ScriptBlock>$_.Usage.TotalTokens</ScriptBlock></ListItem>
              <ListItem><PropertyName>CostUSD</PropertyName></ListItem>
              <ListItem><PropertyName>Credits</PropertyName></ListItem>
              <ListItem><PropertyName>DurationMs</PropertyName></ListItem>
              <ListItem><PropertyName>Content</PropertyName></ListItem>
            </ListItems>
          </ListEntry>
        </ListEntries>
      </ListControl>
    </View>

    <!-- Get-ShpModel -->
    <View>
      <Name>ShellPilot.Model</Name>
      <ViewSelectedBy>
        <TypeName>ShellPilot.Model</TypeName>
      </ViewSelectedBy>
      <TableControl>
        <AutoSize />
        <TableHeaders>
          <TableColumnHeader>
            <Label>Id</Label>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>ServiceType</Label>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>MaxContext</Label>
            <Alignment>Right</Alignment>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>MaxOutput</Label>
            <Alignment>Right</Alignment>
          </TableColumnHeader>
          <TableColumnHeader>
            <Label>ReasoningEfforts</Label>
          </TableColumnHeader>
        </TableHeaders>
        <TableRowEntries>
          <TableRowEntry>
            <TableColumnItems>
              <TableColumnItem>
                <PropertyName>Id</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <PropertyName>ServiceType</PropertyName>
              </TableColumnItem>
              <TableColumnItem>
                <ScriptBlock>if ($null -ne $_.MaxContextWindowTokens) { '{0:N0}' -f [long]$_.MaxContextWindowTokens }</ScriptBlock>
              </TableColumnItem>
              <TableColumnItem>
                <ScriptBlock>if ($null -ne $_.MaxOutputTokens) { '{0:N0}' -f [long]$_.MaxOutputTokens }</ScriptBlock>
              </TableColumnItem>
              <TableColumnItem>
                <ScriptBlock>$_.ReasoningEfforts -join ', '</ScriptBlock>
              </TableColumnItem>
            </TableColumnItems>
          </TableRowEntry>
        </TableRowEntries>
      </TableControl>
    </View>

    <!-- Get-ShpUsage (per-call records) -->
    <View>
      <Name>ShellPilot.UsageRecord</Name>
      <ViewSelectedBy>
        <TypeName>ShellPilot.UsageRecord</TypeName>
      </ViewSelectedBy>
      <TableControl>
        <AutoSize />
        <TableHeaders>
          <TableColumnHeader><Label>Time</Label></TableColumnHeader>
          <TableColumnHeader><Label>Model</Label></TableColumnHeader>
          <TableColumnHeader><Label>Prompt</Label><Alignment>Right</Alignment></TableColumnHeader>
          <TableColumnHeader><Label>Completion</Label><Alignment>Right</Alignment></TableColumnHeader>
          <TableColumnHeader><Label>Total</Label><Alignment>Right</Alignment></TableColumnHeader>
          <TableColumnHeader><Label>CostUSD</Label><Alignment>Right</Alignment></TableColumnHeader>
          <TableColumnHeader><Label>Credits</Label><Alignment>Right</Alignment></TableColumnHeader>
          <TableColumnHeader><Label>Iter</Label><Alignment>Right</Alignment></TableColumnHeader>
          <TableColumnHeader><Label>Tools</Label><Alignment>Right</Alignment></TableColumnHeader>
          <TableColumnHeader><Label>Finish</Label></TableColumnHeader>
          <TableColumnHeader><Label>ms</Label><Alignment>Right</Alignment></TableColumnHeader>
        </TableHeaders>
        <TableRowEntries>
          <TableRowEntry>
            <TableColumnItems>
              <TableColumnItem>
                <ScriptBlock>if ($_.Timestamp -is [datetime]) { $_.Timestamp.ToString('HH:mm:ss') } else { $_.Timestamp }</ScriptBlock>
              </TableColumnItem>
              <TableColumnItem><PropertyName>Model</PropertyName></TableColumnItem>
              <TableColumnItem><PropertyName>PromptTokens</PropertyName></TableColumnItem>
              <TableColumnItem><PropertyName>CompletionTokens</PropertyName></TableColumnItem>
              <TableColumnItem><PropertyName>TotalTokens</PropertyName></TableColumnItem>
              <TableColumnItem><PropertyName>CostUSD</PropertyName></TableColumnItem>
              <TableColumnItem><PropertyName>Credits</PropertyName></TableColumnItem>
              <TableColumnItem><PropertyName>Iterations</PropertyName></TableColumnItem>
              <TableColumnItem><PropertyName>ToolCalls</PropertyName></TableColumnItem>
              <TableColumnItem><PropertyName>FinishReason</PropertyName></TableColumnItem>
              <TableColumnItem><PropertyName>DurationMs</PropertyName></TableColumnItem>
            </TableColumnItems>
          </TableRowEntry>
        </TableRowEntries>
      </TableControl>
    </View>

    <!-- Get-ShpUsage -Summary (aggregate totals) -->
    <View>
      <Name>ShellPilot.UsageSummary</Name>
      <ViewSelectedBy>
        <TypeName>ShellPilot.UsageSummary</TypeName>
      </ViewSelectedBy>
      <ListControl>
        <ListEntries>
          <ListEntry>
            <ListItems>
              <ListItem><PropertyName>Calls</PropertyName></ListItem>
              <ListItem><PropertyName>PromptTokens</PropertyName></ListItem>
              <ListItem><PropertyName>CompletionTokens</PropertyName></ListItem>
              <ListItem><PropertyName>TotalTokens</PropertyName></ListItem>
              <ListItem><PropertyName>CostUSD</PropertyName></ListItem>
              <ListItem><PropertyName>Credits</PropertyName></ListItem>
            </ListItems>
          </ListEntry>
        </ListEntries>
      </ListControl>
    </View>

    <!-- Get-ShpUsage -Summary .ByModel breakdown -->
    <View>
      <Name>ShellPilot.UsageByModel</Name>
      <ViewSelectedBy>
        <TypeName>ShellPilot.UsageByModel</TypeName>
      </ViewSelectedBy>
      <TableControl>
        <AutoSize />
        <TableHeaders>
          <TableColumnHeader><Label>Model</Label></TableColumnHeader>
          <TableColumnHeader><Label>Calls</Label><Alignment>Right</Alignment></TableColumnHeader>
          <TableColumnHeader><Label>Prompt</Label><Alignment>Right</Alignment></TableColumnHeader>
          <TableColumnHeader><Label>Completion</Label><Alignment>Right</Alignment></TableColumnHeader>
          <TableColumnHeader><Label>Total</Label><Alignment>Right</Alignment></TableColumnHeader>
          <TableColumnHeader><Label>CostUSD</Label><Alignment>Right</Alignment></TableColumnHeader>
          <TableColumnHeader><Label>Credits</Label><Alignment>Right</Alignment></TableColumnHeader>
        </TableHeaders>
        <TableRowEntries>
          <TableRowEntry>
            <TableColumnItems>
              <TableColumnItem><PropertyName>Model</PropertyName></TableColumnItem>
              <TableColumnItem><PropertyName>Calls</PropertyName></TableColumnItem>
              <TableColumnItem><PropertyName>PromptTokens</PropertyName></TableColumnItem>
              <TableColumnItem><PropertyName>CompletionTokens</PropertyName></TableColumnItem>
              <TableColumnItem><PropertyName>TotalTokens</PropertyName></TableColumnItem>
              <TableColumnItem><PropertyName>CostUSD</PropertyName></TableColumnItem>
              <TableColumnItem><PropertyName>Credits</PropertyName></TableColumnItem>
            </TableColumnItems>
          </TableRowEntry>
        </TableRowEntries>
      </TableControl>
    </View>

    <!-- Get-ShpTool -->
    <View>
      <Name>ShellPilot.Tool</Name>
      <ViewSelectedBy>
        <TypeName>ShellPilot.Tool</TypeName>
      </ViewSelectedBy>
      <TableControl>
        <AutoSize />
        <TableHeaders>
          <TableColumnHeader><Label>Name</Label></TableColumnHeader>
          <TableColumnHeader><Label>Command</Label></TableColumnHeader>
          <TableColumnHeader><Label>Description</Label></TableColumnHeader>
        </TableHeaders>
        <TableRowEntries>
          <TableRowEntry>
            <TableColumnItems>
              <TableColumnItem><PropertyName>Name</PropertyName></TableColumnItem>
              <TableColumnItem><PropertyName>Command</PropertyName></TableColumnItem>
              <TableColumnItem><PropertyName>Description</PropertyName></TableColumnItem>
            </TableColumnItems>
          </TableRowEntry>
        </TableRowEntries>
      </TableControl>
    </View>

    <!-- Get-ShpDefault -->
    <View>
      <Name>ShellPilot.Default</Name>
      <ViewSelectedBy>
        <TypeName>ShellPilot.Default</TypeName>
      </ViewSelectedBy>
      <TableControl>
        <AutoSize />
        <TableHeaders>
          <TableColumnHeader><Label>Model</Label></TableColumnHeader>
          <TableColumnHeader><Label>ReasoningEffort</Label></TableColumnHeader>
          <TableColumnHeader><Label>MaxOutputTokens</Label><Alignment>Right</Alignment></TableColumnHeader>
        </TableHeaders>
        <TableRowEntries>
          <TableRowEntry>
            <TableColumnItems>
              <TableColumnItem><PropertyName>Model</PropertyName></TableColumnItem>
              <TableColumnItem><PropertyName>ReasoningEffort</PropertyName></TableColumnItem>
              <TableColumnItem><PropertyName>MaxOutputTokens</PropertyName></TableColumnItem>
            </TableColumnItems>
          </TableRowEntry>
        </TableRowEntries>
      </TableControl>
    </View>

    <!-- Get-ShpContext -->
    <View>
      <Name>ShellPilot.Context</Name>
      <ViewSelectedBy>
        <TypeName>ShellPilot.Context</TypeName>
      </ViewSelectedBy>
      <TableControl>
        <AutoSize />
        <TableHeaders>
          <TableColumnHeader><Label>TimeoutSec</Label><Alignment>Right</Alignment></TableColumnHeader>
          <TableColumnHeader><Label>MaxRetryCount</Label><Alignment>Right</Alignment></TableColumnHeader>
          <TableColumnHeader><Label>RetryDelaySec</Label><Alignment>Right</Alignment></TableColumnHeader>
          <TableColumnHeader><Label>NetworkOutageToleranceSec</Label><Alignment>Right</Alignment></TableColumnHeader>
          <TableColumnHeader><Label>ApiBase</Label></TableColumnHeader>
          <TableColumnHeader><Label>ApiKey</Label></TableColumnHeader>
        </TableHeaders>
        <TableRowEntries>
          <TableRowEntry>
            <TableColumnItems>
              <TableColumnItem><PropertyName>TimeoutSec</PropertyName></TableColumnItem>
              <TableColumnItem><PropertyName>MaxRetryCount</PropertyName></TableColumnItem>
              <TableColumnItem><PropertyName>RetryDelaySec</PropertyName></TableColumnItem>
              <TableColumnItem><PropertyName>NetworkOutageToleranceSec</PropertyName></TableColumnItem>
              <TableColumnItem><PropertyName>ApiBase</PropertyName></TableColumnItem>
              <TableColumnItem><PropertyName>ApiKey</PropertyName></TableColumnItem>
            </TableColumnItems>
          </TableRowEntry>
        </TableRowEntries>
      </TableControl>
    </View>

    <!-- Get-ShpCostEstimate -->
    <View>
      <Name>ShellPilot.CostEstimate</Name>
      <ViewSelectedBy>
        <TypeName>ShellPilot.CostEstimate</TypeName>
      </ViewSelectedBy>
      <TableControl>
        <AutoSize />
        <TableHeaders>
          <TableColumnHeader><Label>Model</Label></TableColumnHeader>
          <TableColumnHeader><Label>EstimatedInputTokens</Label><Alignment>Right</Alignment></TableColumnHeader>
          <TableColumnHeader><Label>EstimatedInputCostUSD</Label><Alignment>Right</Alignment></TableColumnHeader>
          <TableColumnHeader><Label>EstimatedInputCredits</Label><Alignment>Right</Alignment></TableColumnHeader>
        </TableHeaders>
        <TableRowEntries>
          <TableRowEntry>
            <TableColumnItems>
              <TableColumnItem><PropertyName>Model</PropertyName></TableColumnItem>
              <TableColumnItem><PropertyName>EstimatedInputTokens</PropertyName></TableColumnItem>
              <TableColumnItem><PropertyName>EstimatedInputCostUSD</PropertyName></TableColumnItem>
              <TableColumnItem><PropertyName>EstimatedInputCredits</PropertyName></TableColumnItem>
            </TableColumnItems>
          </TableRowEntry>
        </TableRowEntries>
      </TableControl>
    </View>

  </ViewDefinitions>
</Configuration>