Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion main/src/services/paneChatManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import {
import { RUNPANE_CONTRACT } from '../../../shared/types/generatedRunpaneContract';

const PANE_CHAT_TITLE = 'Pane Chat';
const PANE_CHAT_BOOTSTRAP_VERSION = 8;
const PANE_CHAT_BOOTSTRAP_VERSION = 9;
const UUID_PATTERN = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;

function isValidUuid(value: unknown): value is string {
Expand Down
6 changes: 6 additions & 0 deletions main/src/services/skillCacheManager.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ describe('SkillCacheManager Pane Chat guide', () => {
expect(guide).toContain('RunPane orchestrator skill for Codex');
expect(normalizedGuide).toContain('/skills/dcouple/parsa/.codex/skills/runpane-orchestrator/SKILL.md');
expect(normalizedGuide).toContain('/skills/dcouple/docs/readme-workflow-map.png');
expect(guide).toContain('pane-work-recap');
expect(guide).toContain('pane-work-prioritizer');
expect(guide).toContain('when they ask what to work on next');
expect(guide).toContain('Do not replace orchestration with a normal chat answer for Pane work.');
expect(guide).toContain('verify its state with');
});
Expand Down Expand Up @@ -92,6 +95,9 @@ describe('SkillCacheManager Pane Chat guide', () => {
expect(canonicalSkill).toContain('After a PR is merged, the user can archive the Pane');
expect(canonicalSkill).toContain('Workflow map source:');
expect(canonicalSkill).toContain('Skill legend source:');
expect(canonicalSkill).toContain('pane-work-recap');
expect(canonicalSkill).toContain('pane-work-prioritizer');
expect(canonicalSkill).toContain('Do not start implementation panes for those answers');
});

it('mirrors cached repository skills into project-scoped Codex and Claude skill roots', async () => {
Expand Down
15 changes: 15 additions & 0 deletions main/src/services/skillCacheManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,13 @@ const OPTIONAL_FALLBACK_RAW_FILES = [
'parsa/.codex/skills/plan/plan_base.md',
'parsa/.codex/skills/pr-test-automation/agents/openai.yaml',
'parsa/.codex/skills/teach-back/agents/openai.yaml',
'parsa/.codex/skills/pane-work-recap/SKILL.md',
'parsa/.codex/skills/pane-work-recap/agents/openai.yaml',
'parsa/.codex/skills/pane-work-prioritizer/SKILL.md',
'parsa/.codex/skills/pane-work-prioritizer/agents/openai.yaml',
'parsa/.claude/skills/create-plan/plan_base.md',
'parsa/.claude/skills/pane-work-recap/SKILL.md',
'parsa/.claude/skills/pane-work-prioritizer/SKILL.md',
] as const;

const FALLBACK_RAW_FILES = [
Expand Down Expand Up @@ -342,6 +348,11 @@ Use the cached RunPane orchestrator skill as the primary workflow reference. The
cached files may be refreshed by Pane in the background; do not fetch GitHub just
to initialize yourself.

For read-only work questions, use \`pane-work-recap\` when the user asks what
they worked on and \`pane-work-prioritizer\` when they ask what to work on next.
Ground both answers in RunPane, git, GitHub, and agent-log evidence before
starting new implementation panes.

## Orchestrator Contract

For any request that asks you to inspect, change, plan, test, review, or
Expand Down Expand Up @@ -414,6 +425,10 @@ with generic cached RunPane documentation, follow the runtime context.
Do not claim initialization is complete until you have loaded these workflow
references and can name the intended lifecycle for the user's task.

For read-only work questions, use \`pane-work-recap\` when the user asks what
they worked on and \`pane-work-prioritizer\` when they ask what to work on next.
Do not start implementation panes for those answers unless the user asks you to.

## Role Boundary

You are an orchestrator, not an implementation worker.
Expand Down
Loading