mirror of
https://github.com/harivansh-afk/clanker-agent.git
synced 2026-04-16 19:04:37 +00:00
move pi-mono into companion-cloud as apps/companion-os
- Copy all pi-mono source into apps/companion-os/ - Update Dockerfile to COPY pre-built binary instead of downloading from GitHub Releases - Update deploy-staging.yml to build pi from source (bun compile) before Docker build - Add apps/companion-os/** to path triggers - No more cross-repo dispatch needed Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
commit
0250f72976
579 changed files with 206942 additions and 0 deletions
33
packages/coding-agent/test/fixtures/assistant-message-with-thinking-code.json
vendored
Normal file
33
packages/coding-agent/test/fixtures/assistant-message-with-thinking-code.json
vendored
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
{
|
||||
"role": "assistant",
|
||||
"content": [
|
||||
{
|
||||
"type": "thinking",
|
||||
"thinking": "So `findModel` just looks up a model by provider + id from the merged models list (built-in + models.json).\n\nFor the SDK, the flow would be:1. `model` provided → use it\n2. Else check settings for default → call `findModel(provider, id)` → check if available (has API key)\n3. Else first from `getAvailableModels()`\n\nThe `findModel` function returns `{ model, error }`. For SDK export, we might want a simpler signature.Options for SDK:\n\n**Option A: Keep current signature**```typescript\nfunction findModel(provider: string, modelId: string, agentDir?: string): { model: Model<any> | null; error: string | null };\n```**Option B: Simpler - just returns model or null**\n```typescript\nfunction findModel(provider: string, modelId: string, agentDir?: string): Model<any> | null;```\n\n**Option C: Throws on error**```typescript\nfunction findModel(provider: string, modelId: string, agentDir?: string): Model<any>; // throws if not found\n```\n\nI think **Option B** is fine for SDK. Errors from loading models.json are edge cases - if the file is malformed, we can throw. For \"model not found\", just return null.\n\nActually, for the SDK, maybe we should rethink. The user of the SDK will likely:\n1. Know which model they want and construct it directly2. Or want to pick from available modelsFor case 1, they don't need findModel - they construct the Model object.\nFor case 2, they use `discoverAvailableModels()` and pick.`findModel` is useful for looking up by string ID (like from config or user input). But the signature could just be:```typescriptfunction findModel(provider: string, modelId: string, agentDir?: string): Model<any> | null;\n```\n\nReturns the model if found (in built-ins or models.json), null if not found. Throws if models.json is malformed (exceptional case).\n\n\nThe SDK's model discovery functions provide a clean, straightforward way to handle model selection. I'll outline the key methods for finding and selecting models programmatically. The core functions allow discovering all models, filtering to available models with valid API keys, and finding a specific model by provider and ID. This gives developers flexible options for model management in their applications.\n\nIn the session creation process, if no model is explicitly specified, the system will first attempt to use the default provider and model configuration. If that fails, it will then retrieve the first available model from the discovered set. Should no models be found, an error will be raised to prevent silent failures.\n\nThe potential complexity arises from the need to support custom model configurations and ensure robust model selection across different scenarios.",
|
||||
"thinkingSignature": "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"
|
||||
},
|
||||
{
|
||||
"type": "text",
|
||||
"text": "So the current flow in main.ts:\n\n**findInitialModelForSession:**\n1. CLI args (`--provider` + `--model`) → use if both provided\n2. Scoped models (`--models` flag) → use first (unless --continue/--resume)\n3. Settings (`defaultProvider` + `defaultModel`) → use if found\n4. First available model with valid API key\n5. Return null if none\n\n**initialThinking:**\n1. Start with `'off'`\n2. If scoped models (and not continuing) → use first scoped model's thinking level\n3. Else check `settings.defaultThinkingLevel`\n4. CLI `--thinking` overrides\n5. Clamp to model capabilities\n\n---\n\nFor SDK, we don't have CLI args or scoped models. Simplifies to:\n\n**model resolution (if omitted):**\n1. Check `settings.defaultProvider` + `settings.defaultModel` → find it, verify has API key\n2. Else first from `discoverAvailableModels()`\n3. Error if none\n\n**thinkingLevel resolution (if omitted):**\n1. Check `settings.defaultThinkingLevel`\n2. Else `'off'`\n3. Clamp to model capabilities\n\n---\n\nFor `findModel`, current signature returns `{ model, error }`. For SDK, simpler:\n\n```typescript\n// Returns model or null. Throws only if models.json is malformed.\nexport function findModel(provider: string, modelId: string, agentDir?: string): Model<any> | null;\n```\n\nSo the model-related exports:\n\n```typescript\n// All models (built-in + models.json)\nexport function discoverModels(agentDir?: string): Model<any>[];\n\n// Models with valid API keys\nexport function discoverAvailableModels(agentDir?: string): Promise<Model<any>[]>;\n\n// Lookup by provider/id\nexport function findModel(provider: string, modelId: string, agentDir?: string): Model<any> | null;\n```\n\nDoes this address the wonkiness, or is there something else bothering you about it?"
|
||||
}
|
||||
],
|
||||
"api": "anthropic-messages",
|
||||
"provider": "anthropic",
|
||||
"model": "claude-opus-4-5",
|
||||
"usage": {
|
||||
"input": 8,
|
||||
"output": 1211,
|
||||
"cacheRead": 89775,
|
||||
"cacheWrite": 611,
|
||||
"totalTokens": 91605,
|
||||
"cost": {
|
||||
"input": 4e-5,
|
||||
"output": 0.030275,
|
||||
"cacheRead": 0.0448875,
|
||||
"cacheWrite": 0.00381875,
|
||||
"total": 0.07902124999999999
|
||||
}
|
||||
},
|
||||
"stopReason": "stop",
|
||||
"timestamp": 1766357372971
|
||||
}
|
||||
1003
packages/coding-agent/test/fixtures/before-compaction.jsonl
vendored
Normal file
1003
packages/coding-agent/test/fixtures/before-compaction.jsonl
vendored
Normal file
File diff suppressed because one or more lines are too long
0
packages/coding-agent/test/fixtures/empty-agent/.gitkeep
vendored
Normal file
0
packages/coding-agent/test/fixtures/empty-agent/.gitkeep
vendored
Normal file
0
packages/coding-agent/test/fixtures/empty-cwd/.gitkeep
vendored
Normal file
0
packages/coding-agent/test/fixtures/empty-cwd/.gitkeep
vendored
Normal file
1019
packages/coding-agent/test/fixtures/large-session.jsonl
vendored
Normal file
1019
packages/coding-agent/test/fixtures/large-session.jsonl
vendored
Normal file
File diff suppressed because one or more lines are too long
8
packages/coding-agent/test/fixtures/skills-collision/first/calendar/SKILL.md
vendored
Normal file
8
packages/coding-agent/test/fixtures/skills-collision/first/calendar/SKILL.md
vendored
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
name: calendar
|
||||
description: First calendar skill.
|
||||
---
|
||||
|
||||
# Calendar (First)
|
||||
|
||||
This is the first calendar skill.
|
||||
8
packages/coding-agent/test/fixtures/skills-collision/second/calendar/SKILL.md
vendored
Normal file
8
packages/coding-agent/test/fixtures/skills-collision/second/calendar/SKILL.md
vendored
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
name: calendar
|
||||
description: Second calendar skill.
|
||||
---
|
||||
|
||||
# Calendar (Second)
|
||||
|
||||
This is the second calendar skill.
|
||||
8
packages/coding-agent/test/fixtures/skills/consecutive-hyphens/SKILL.md
vendored
Normal file
8
packages/coding-agent/test/fixtures/skills/consecutive-hyphens/SKILL.md
vendored
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
name: bad--name
|
||||
description: A skill with consecutive hyphens in the name.
|
||||
---
|
||||
|
||||
# Consecutive Hyphens
|
||||
|
||||
This skill has consecutive hyphens in its name.
|
||||
9
packages/coding-agent/test/fixtures/skills/disable-model-invocation/SKILL.md
vendored
Normal file
9
packages/coding-agent/test/fixtures/skills/disable-model-invocation/SKILL.md
vendored
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
name: disable-model-invocation
|
||||
description: A skill that cannot be invoked by the model.
|
||||
disable-model-invocation: true
|
||||
---
|
||||
|
||||
# Manual Only Skill
|
||||
|
||||
This skill can only be invoked via /skill:disable-model-invocation.
|
||||
8
packages/coding-agent/test/fixtures/skills/invalid-name-chars/SKILL.md
vendored
Normal file
8
packages/coding-agent/test/fixtures/skills/invalid-name-chars/SKILL.md
vendored
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
name: Invalid_Name
|
||||
description: A skill with invalid characters in the name.
|
||||
---
|
||||
|
||||
# Invalid Name
|
||||
|
||||
This skill has uppercase and underscore in the name.
|
||||
8
packages/coding-agent/test/fixtures/skills/invalid-yaml/SKILL.md
vendored
Normal file
8
packages/coding-agent/test/fixtures/skills/invalid-yaml/SKILL.md
vendored
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
name: invalid-yaml
|
||||
description: [unclosed bracket
|
||||
---
|
||||
|
||||
# Invalid YAML Skill
|
||||
|
||||
This skill has invalid YAML in the frontmatter.
|
||||
8
packages/coding-agent/test/fixtures/skills/long-name/SKILL.md
vendored
Normal file
8
packages/coding-agent/test/fixtures/skills/long-name/SKILL.md
vendored
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
name: this-is-a-very-long-skill-name-that-exceeds-the-sixty-four-character-limit-set-by-the-standard
|
||||
description: A skill with a name that exceeds 64 characters.
|
||||
---
|
||||
|
||||
# Long Name
|
||||
|
||||
This skill's name is too long.
|
||||
7
packages/coding-agent/test/fixtures/skills/missing-description/SKILL.md
vendored
Normal file
7
packages/coding-agent/test/fixtures/skills/missing-description/SKILL.md
vendored
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
name: missing-description
|
||||
---
|
||||
|
||||
# Missing Description
|
||||
|
||||
This skill has no description field.
|
||||
11
packages/coding-agent/test/fixtures/skills/multiline-description/SKILL.md
vendored
Normal file
11
packages/coding-agent/test/fixtures/skills/multiline-description/SKILL.md
vendored
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
name: multiline-description
|
||||
description: |
|
||||
This is a multiline description.
|
||||
It spans multiple lines.
|
||||
And should be normalized.
|
||||
---
|
||||
|
||||
# Multiline Description Skill
|
||||
|
||||
This skill tests that multiline YAML descriptions are normalized to single lines.
|
||||
8
packages/coding-agent/test/fixtures/skills/name-mismatch/SKILL.md
vendored
Normal file
8
packages/coding-agent/test/fixtures/skills/name-mismatch/SKILL.md
vendored
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
name: different-name
|
||||
description: A skill with a name that doesn't match the directory.
|
||||
---
|
||||
|
||||
# Name Mismatch
|
||||
|
||||
This skill's name doesn't match its parent directory.
|
||||
8
packages/coding-agent/test/fixtures/skills/nested/child-skill/SKILL.md
vendored
Normal file
8
packages/coding-agent/test/fixtures/skills/nested/child-skill/SKILL.md
vendored
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
name: child-skill
|
||||
description: A nested skill in a subdirectory.
|
||||
---
|
||||
|
||||
# Child Skill
|
||||
|
||||
This skill is nested in a subdirectory.
|
||||
3
packages/coding-agent/test/fixtures/skills/no-frontmatter/SKILL.md
vendored
Normal file
3
packages/coding-agent/test/fixtures/skills/no-frontmatter/SKILL.md
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
# No Frontmatter
|
||||
|
||||
This skill has no YAML frontmatter at all.
|
||||
10
packages/coding-agent/test/fixtures/skills/unknown-field/SKILL.md
vendored
Normal file
10
packages/coding-agent/test/fixtures/skills/unknown-field/SKILL.md
vendored
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
name: unknown-field
|
||||
description: A skill with an unknown frontmatter field.
|
||||
author: someone
|
||||
version: 1.0
|
||||
---
|
||||
|
||||
# Unknown Field
|
||||
|
||||
This skill has non-standard frontmatter fields.
|
||||
8
packages/coding-agent/test/fixtures/skills/valid-skill/SKILL.md
vendored
Normal file
8
packages/coding-agent/test/fixtures/skills/valid-skill/SKILL.md
vendored
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
---
|
||||
name: valid-skill
|
||||
description: A valid skill for testing purposes.
|
||||
---
|
||||
|
||||
# Valid Skill
|
||||
|
||||
This is a valid skill that follows the Agent Skills standard.
|
||||
Loading…
Add table
Add a link
Reference in a new issue