codebyplan 1.5.1 → 1.9.0
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.
- package/dist/cli.js +4462 -748
- package/package.json +5 -1
- package/templates/.gitkeep +0 -0
- package/templates/README.md +20 -0
- package/templates/agents/cbp-cc-executor.md +213 -0
- package/templates/agents/cbp-database-agent.md +229 -0
- package/templates/agents/cbp-improve-claude.md +245 -0
- package/templates/agents/cbp-improve-round.md +284 -0
- package/templates/agents/cbp-mechanical-edits.md +111 -0
- package/templates/agents/cbp-research.md +282 -0
- package/templates/agents/cbp-round-executor.md +604 -0
- package/templates/agents/cbp-security-agent.md +134 -0
- package/templates/agents/cbp-task-check.md +213 -0
- package/templates/agents/cbp-task-planner.md +582 -0
- package/templates/agents/cbp-test-e2e-agent.md +363 -0
- package/templates/agents/cbp-testing-qa-agent.md +400 -0
- package/templates/context/mcp-docs.md +139 -0
- package/templates/hooks/README.md +236 -0
- package/templates/hooks/cbp-auto-test-hooks.sh +44 -0
- package/templates/hooks/cbp-lint-format-on-edit.sh +159 -0
- package/templates/hooks/cbp-maestro-yaml-validate.sh +100 -0
- package/templates/hooks/cbp-mcp-migration-guard.sh +32 -0
- package/templates/hooks/cbp-mcp-round-sync.sh +79 -0
- package/templates/hooks/cbp-mcp-worktree-inject.sh +76 -0
- package/templates/hooks/cbp-notify.sh +68 -0
- package/templates/hooks/cbp-plugin-dispatch.sh +29 -0
- package/templates/hooks/cbp-pre-commit-quality-gate.sh +204 -0
- package/templates/hooks/cbp-statusline.sh +347 -0
- package/templates/hooks/cbp-subagent-statusline.sh +182 -0
- package/templates/hooks/cbp-test-coverage-gate.sh +144 -0
- package/templates/hooks/cbp-test-hooks.sh +320 -0
- package/templates/hooks/hooks.json +85 -0
- package/templates/hooks/validate-context-usage.sh +59 -0
- package/templates/hooks/validate-git-commit.sh +78 -0
- package/templates/hooks/validate-git-stash-deny.sh +32 -0
- package/templates/hooks/validate-structure-lengths.sh +57 -0
- package/templates/hooks/validate-structure-lib.sh +104 -0
- package/templates/hooks/validate-structure-patterns.sh +54 -0
- package/templates/hooks/validate-structure-scope.sh +33 -0
- package/templates/hooks/validate-structure-smoke.sh +95 -0
- package/templates/hooks/validate-structure-templates.sh +34 -0
- package/templates/hooks/validate-structure.sh +69 -0
- package/templates/rules/.gitkeep +0 -0
- package/templates/rules/README.md +47 -0
- package/templates/rules/context-file-loading.md +52 -0
- package/templates/rules/scope-vocabulary.md +64 -0
- package/templates/rules/todo-backend.md +109 -0
- package/templates/settings.project.base.json +55 -0
- package/templates/settings.user.base.json +25 -0
- package/templates/skills/cbp-build-cc-agent/SKILL.md +139 -0
- package/templates/skills/cbp-build-cc-agent/examples/read-only-reviewer.md +32 -0
- package/templates/skills/cbp-build-cc-agent/examples/with-hooks.md +41 -0
- package/templates/skills/cbp-build-cc-agent/examples/with-skills-preload.md +25 -0
- package/templates/skills/cbp-build-cc-agent/reference/cbp-quality.md +153 -0
- package/templates/skills/cbp-build-cc-agent/reference/frontmatter-fields.md +37 -0
- package/templates/skills/cbp-build-cc-agent/reference/permission-modes.md +18 -0
- package/templates/skills/cbp-build-cc-agent/scripts/validate-agent.sh +67 -0
- package/templates/skills/cbp-build-cc-agent/templates/agent.md +66 -0
- package/templates/skills/cbp-build-cc-claude-file/SKILL.md +178 -0
- package/templates/skills/cbp-build-cc-claude-file/examples/minimal-project.md +33 -0
- package/templates/skills/cbp-build-cc-claude-file/examples/monorepo-with-imports.md +39 -0
- package/templates/skills/cbp-build-cc-claude-file/reference/imports.md +72 -0
- package/templates/skills/cbp-build-cc-claude-file/reference/what-belongs.md +39 -0
- package/templates/skills/cbp-build-cc-claude-file/templates/project-claude-md.md +48 -0
- package/templates/skills/cbp-build-cc-claude-file/templates/user-claude-md.md +22 -0
- package/templates/skills/cbp-build-cc-memory/SKILL.md +201 -0
- package/templates/skills/cbp-build-cc-memory/examples/feedback-memory.md +11 -0
- package/templates/skills/cbp-build-cc-memory/examples/project-memory.md +11 -0
- package/templates/skills/cbp-build-cc-memory/examples/reference-memory.md +13 -0
- package/templates/skills/cbp-build-cc-memory/examples/user-memory.md +14 -0
- package/templates/skills/cbp-build-cc-memory/reference/memory-types.md +59 -0
- package/templates/skills/cbp-build-cc-memory/reference/when-to-save.md +62 -0
- package/templates/skills/cbp-build-cc-memory/templates/MEMORY-index.md +4 -0
- package/templates/skills/cbp-build-cc-memory/templates/memory-entry.md +15 -0
- package/templates/skills/cbp-build-cc-mode/SKILL.md +99 -0
- package/templates/skills/cbp-build-cc-rule/SKILL.md +176 -0
- package/templates/skills/cbp-build-cc-rule/examples/global-rule.md +19 -0
- package/templates/skills/cbp-build-cc-rule/examples/scoped-rule.md +41 -0
- package/templates/skills/cbp-build-cc-rule/reference/paths-patterns.md +48 -0
- package/templates/skills/cbp-build-cc-rule/templates/rule.md +32 -0
- package/templates/skills/cbp-build-cc-settings/SKILL.md +220 -0
- package/templates/skills/cbp-build-cc-settings/examples/hooks-config.json +64 -0
- package/templates/skills/cbp-build-cc-settings/examples/permissions-config.json +34 -0
- package/templates/skills/cbp-build-cc-settings/examples/sandbox-config.json +42 -0
- package/templates/skills/cbp-build-cc-settings/reference/cbp-conventions.md +104 -0
- package/templates/skills/cbp-build-cc-settings/reference/permission-rules.md +61 -0
- package/templates/skills/cbp-build-cc-settings/reference/scope-precedence.md +73 -0
- package/templates/skills/cbp-build-cc-settings/reference/settings-fields.md +166 -0
- package/templates/skills/cbp-build-cc-settings/templates/settings.json +23 -0
- package/templates/skills/cbp-build-cc-settings/templates/settings.local.json +10 -0
- package/templates/skills/cbp-build-cc-skill/SKILL.md +154 -0
- package/templates/skills/cbp-build-cc-skill/examples/dynamic-context.md +31 -0
- package/templates/skills/cbp-build-cc-skill/examples/fork-skill.md +22 -0
- package/templates/skills/cbp-build-cc-skill/examples/knowledge-skill.md +25 -0
- package/templates/skills/cbp-build-cc-skill/examples/task-skill.md +29 -0
- package/templates/skills/cbp-build-cc-skill/reference/cbp-quality.md +157 -0
- package/templates/skills/cbp-build-cc-skill/reference/frontmatter-fields.md +35 -0
- package/templates/skills/cbp-build-cc-skill/reference/string-substitutions.md +60 -0
- package/templates/skills/cbp-build-cc-skill/scripts/validate-skill.sh +90 -0
- package/templates/skills/cbp-build-cc-skill/templates/skill.md +51 -0
- package/templates/skills/cbp-checkpoint-check/SKILL.md +156 -0
- package/templates/skills/cbp-checkpoint-complete/SKILL.md +109 -0
- package/templates/skills/cbp-checkpoint-create/SKILL.md +116 -0
- package/templates/skills/cbp-checkpoint-end/SKILL.md +241 -0
- package/templates/skills/cbp-checkpoint-plan/SKILL.md +137 -0
- package/templates/skills/cbp-checkpoint-plan/reference/alternative-comparison-template.md +54 -0
- package/templates/skills/cbp-checkpoint-plan/reference/dep-decision-rubric.md +50 -0
- package/templates/skills/cbp-checkpoint-plan/reference/e2e-discovery-probe.md +57 -0
- package/templates/skills/cbp-checkpoint-plan/reference/gap-analysis-playbook.md +47 -0
- package/templates/skills/cbp-checkpoint-start/SKILL.md +84 -0
- package/templates/skills/cbp-checkpoint-update/SKILL.md +115 -0
- package/templates/skills/cbp-frontend-a11y/SKILL.md +109 -0
- package/templates/skills/cbp-frontend-a11y/reference/aria-roles-states.md +130 -0
- package/templates/skills/cbp-frontend-a11y/reference/contrast-visual.md +122 -0
- package/templates/skills/cbp-frontend-a11y/reference/keyboard-patterns.md +154 -0
- package/templates/skills/cbp-frontend-a11y/reference/semantic-html.md +111 -0
- package/templates/skills/cbp-frontend-design/SKILL.md +145 -0
- package/templates/skills/cbp-frontend-design/reference/nextjs-scss.md +118 -0
- package/templates/skills/cbp-frontend-design/reference/rn-expo.md +101 -0
- package/templates/skills/cbp-frontend-design/reference/tauri-react.md +82 -0
- package/templates/skills/cbp-frontend-ui/SKILL.md +262 -0
- package/templates/skills/cbp-frontend-ui/reference/ui-label-maps.md +42 -0
- package/templates/skills/cbp-frontend-ui/reference/ui-layout-patterns.md +105 -0
- package/templates/skills/cbp-frontend-ui/reference/variant-defaults.md +149 -0
- package/templates/skills/cbp-frontend-ux/SKILL.md +181 -0
- package/templates/skills/cbp-git-branch-feat-create/SKILL.md +115 -0
- package/templates/skills/cbp-git-commit/SKILL.md +278 -0
- package/templates/skills/cbp-git-worktree-create/SKILL.md +226 -0
- package/templates/skills/cbp-git-worktree-remove/SKILL.md +145 -0
- package/templates/skills/cbp-merge-main/SKILL.md +228 -0
- package/templates/skills/cbp-round-check/SKILL.md +104 -0
- package/templates/skills/cbp-round-end/SKILL.md +183 -0
- package/templates/skills/cbp-round-end/reference/findings-presentation.md +44 -0
- package/templates/skills/cbp-round-end/reference/inline-fallback.md +35 -0
- package/templates/skills/cbp-round-execute/SKILL.md +211 -0
- package/templates/skills/cbp-round-execute/reference/inline-fallback.md +59 -0
- package/templates/skills/cbp-round-input/SKILL.md +165 -0
- package/templates/skills/cbp-round-start/SKILL.md +222 -0
- package/templates/skills/cbp-round-update/SKILL.md +163 -0
- package/templates/skills/cbp-session-end/SKILL.md +187 -0
- package/templates/skills/cbp-session-start/SKILL.md +155 -0
- package/templates/skills/cbp-ship/SKILL.md +332 -0
- package/templates/skills/cbp-ship/reference/changesets-overview.md +120 -0
- package/templates/skills/cbp-ship/reference/eas-cli-overview.md +60 -0
- package/templates/skills/cbp-ship/reference/gh-cli-overview.md +135 -0
- package/templates/skills/cbp-ship/reference/gh-cli-shipment-commands.md +283 -0
- package/templates/skills/cbp-ship/reference/npm-publish-monorepo.md +252 -0
- package/templates/skills/cbp-ship/reference/npm-publish-oidc-trusted.md +157 -0
- package/templates/skills/cbp-ship/reference/npm-publish-overview.md +171 -0
- package/templates/skills/cbp-ship/reference/preflight-checklist.md +88 -0
- package/templates/skills/cbp-ship/reference/railway-nestjs-deployment.md +169 -0
- package/templates/skills/cbp-ship/reference/railway-overview.md +120 -0
- package/templates/skills/cbp-ship/reference/railway-troubleshooting.md +168 -0
- package/templates/skills/cbp-ship/reference/release-please-overview.md +99 -0
- package/templates/skills/cbp-ship/reference/surface-expo-eas.md +155 -0
- package/templates/skills/cbp-ship/reference/surface-npm.md +180 -0
- package/templates/skills/cbp-ship/reference/surface-railway.md +152 -0
- package/templates/skills/cbp-ship/reference/surface-supabase.md +178 -0
- package/templates/skills/cbp-ship/reference/surface-tauri.md +138 -0
- package/templates/skills/cbp-ship/reference/surface-vercel.md +124 -0
- package/templates/skills/cbp-ship/reference/surface-vscode-ext.md +144 -0
- package/templates/skills/cbp-ship/reference/surfaces.md +60 -0
- package/templates/skills/cbp-ship/reference/testflight-automation.md +215 -0
- package/templates/skills/cbp-ship/reference/testflight-internal-vs-external.md +69 -0
- package/templates/skills/cbp-ship/reference/testflight-overview.md +98 -0
- package/templates/skills/cbp-ship/reference/versioning.md +116 -0
- package/templates/skills/cbp-ship/scripts/detect-surfaces.sh +217 -0
- package/templates/skills/cbp-ship/scripts/verify-expo-eas.sh +35 -0
- package/templates/skills/cbp-ship/scripts/verify-npm.sh +21 -0
- package/templates/skills/cbp-ship/scripts/verify-railway.sh +41 -0
- package/templates/skills/cbp-ship/scripts/verify-supabase.sh +19 -0
- package/templates/skills/cbp-ship/scripts/verify-tauri.sh +24 -0
- package/templates/skills/cbp-ship/scripts/verify-vercel.sh +32 -0
- package/templates/skills/cbp-ship/scripts/verify-vscode-ext.sh +25 -0
- package/templates/skills/cbp-ship/templates/eas.json +66 -0
- package/templates/skills/cbp-ship/templates/railway.toml +15 -0
- package/templates/skills/cbp-ship/templates/release-please-config.json +17 -0
- package/templates/skills/cbp-ship/templates/vercel.json +19 -0
- package/templates/skills/cbp-ship/templates/vscodeignore +21 -0
- package/templates/skills/cbp-ship/templates/workflow-changesets.yml +41 -0
- package/templates/skills/cbp-ship/templates/workflow-eas-submit.yml +53 -0
- package/templates/skills/cbp-ship/templates/workflow-npm-publish.yml +36 -0
- package/templates/skills/cbp-ship/templates/workflow-release-please.yml +21 -0
- package/templates/skills/cbp-ship/templates/workflow-tauri-release.yml +69 -0
- package/templates/skills/cbp-ship/templates/workflow-vsce-publish.yml +31 -0
- package/templates/skills/cbp-ship-configure/SKILL.md +296 -0
- package/templates/skills/cbp-ship-configure/reference/expo-mobile.md +204 -0
- package/templates/skills/cbp-ship-configure/reference/npm-package.md +165 -0
- package/templates/skills/cbp-ship-configure/reference/railway-backend.md +199 -0
- package/templates/skills/cbp-ship-configure/reference/supabase.md +200 -0
- package/templates/skills/cbp-ship-configure/reference/tauri-desktop.md +181 -0
- package/templates/skills/cbp-ship-configure/reference/vercel.md +117 -0
- package/templates/skills/cbp-ship-configure/reference/vscode-ext.md +155 -0
- package/templates/skills/cbp-ship-main/SKILL.md +65 -0
- package/templates/skills/cbp-supabase-branch-check/SKILL.md +337 -0
- package/templates/skills/cbp-supabase-branch-check/reference/dag-steps.md +29 -0
- package/templates/skills/cbp-supabase-migrate/SKILL.md +314 -0
- package/templates/skills/cbp-supabase-migrate/reference/advisor-triage.md +70 -0
- package/templates/skills/cbp-supabase-migrate/reference/cli-fallback.md +87 -0
- package/templates/skills/cbp-supabase-migrate/reference/preflight-dry-run.md +58 -0
- package/templates/skills/cbp-supabase-setup/SKILL.md +239 -0
- package/templates/skills/cbp-supabase-setup/reference/branching-setup.md +121 -0
- package/templates/skills/cbp-supabase-setup/reference/cli-fallback.md +109 -0
- package/templates/skills/cbp-task-check/SKILL.md +166 -0
- package/templates/skills/cbp-task-complete/SKILL.md +206 -0
- package/templates/skills/cbp-task-complete/reference/checkpoint-done-branching.md +48 -0
- package/templates/skills/cbp-task-complete/reference/next-step-heuristic.md +56 -0
- package/templates/skills/cbp-task-create/SKILL.md +167 -0
- package/templates/skills/cbp-task-start/SKILL.md +239 -0
- package/templates/skills/cbp-task-testing/SKILL.md +277 -0
- package/templates/skills/cbp-todo/SKILL.md +111 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
.vscode/**
|
|
2
|
+
.vscode-test/**
|
|
3
|
+
src/**
|
|
4
|
+
.gitignore
|
|
5
|
+
.yarnrc
|
|
6
|
+
vsc-extension-quickstart.md
|
|
7
|
+
**/tsconfig.json
|
|
8
|
+
**/.eslintrc.*
|
|
9
|
+
**/eslint.config.*
|
|
10
|
+
**/*.map
|
|
11
|
+
**/*.ts
|
|
12
|
+
node_modules
|
|
13
|
+
.git/**
|
|
14
|
+
*.test.*
|
|
15
|
+
*.spec.*
|
|
16
|
+
**/__tests__/**
|
|
17
|
+
**/__mocks__/**
|
|
18
|
+
.github/**
|
|
19
|
+
.claude/**
|
|
20
|
+
docs/**
|
|
21
|
+
CHANGELOG.md
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
name: changesets
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- REPLACE_WITH_INTEGRATION_BRANCH
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: write
|
|
10
|
+
pull-requests: write
|
|
11
|
+
id-token: write
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
release:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v4
|
|
18
|
+
with:
|
|
19
|
+
fetch-depth: 0
|
|
20
|
+
|
|
21
|
+
- uses: pnpm/action-setup@v3
|
|
22
|
+
with:
|
|
23
|
+
version: 10
|
|
24
|
+
|
|
25
|
+
- uses: actions/setup-node@v4
|
|
26
|
+
with:
|
|
27
|
+
node-version: 22
|
|
28
|
+
cache: pnpm
|
|
29
|
+
registry-url: https://registry.npmjs.org
|
|
30
|
+
|
|
31
|
+
- run: pnpm install --frozen-lockfile
|
|
32
|
+
|
|
33
|
+
- uses: changesets/action@v1
|
|
34
|
+
with:
|
|
35
|
+
version: pnpm changeset version
|
|
36
|
+
publish: pnpm changeset publish
|
|
37
|
+
commit: 'chore(release): version packages'
|
|
38
|
+
title: 'chore(release): version packages'
|
|
39
|
+
env:
|
|
40
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
41
|
+
NPM_CONFIG_PROVENANCE: 'true'
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
name: EAS Build + Submit
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- 'mobile-v*.*.*'
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
inputs:
|
|
9
|
+
profile:
|
|
10
|
+
type: choice
|
|
11
|
+
description: Build profile
|
|
12
|
+
options: [preview, production]
|
|
13
|
+
default: preview
|
|
14
|
+
platform:
|
|
15
|
+
type: choice
|
|
16
|
+
description: Platform
|
|
17
|
+
options: [all, ios, android]
|
|
18
|
+
default: all
|
|
19
|
+
|
|
20
|
+
jobs:
|
|
21
|
+
build:
|
|
22
|
+
runs-on: ubuntu-latest
|
|
23
|
+
steps:
|
|
24
|
+
- uses: actions/checkout@v4
|
|
25
|
+
|
|
26
|
+
- uses: pnpm/action-setup@v3
|
|
27
|
+
with:
|
|
28
|
+
version: 10
|
|
29
|
+
|
|
30
|
+
- uses: actions/setup-node@v4
|
|
31
|
+
with:
|
|
32
|
+
node-version: 22
|
|
33
|
+
cache: pnpm
|
|
34
|
+
|
|
35
|
+
- uses: expo/expo-github-action@v8
|
|
36
|
+
with:
|
|
37
|
+
eas-version: latest
|
|
38
|
+
token: ${{ secrets.EXPO_TOKEN }}
|
|
39
|
+
|
|
40
|
+
- run: pnpm install --frozen-lockfile
|
|
41
|
+
|
|
42
|
+
- name: EAS Build
|
|
43
|
+
run: |
|
|
44
|
+
cd apps/mobile
|
|
45
|
+
eas build --profile ${{ inputs.profile || 'preview' }} \
|
|
46
|
+
--platform ${{ inputs.platform || 'all' }} \
|
|
47
|
+
--non-interactive --no-wait
|
|
48
|
+
|
|
49
|
+
- name: EAS Submit (production only)
|
|
50
|
+
if: inputs.profile == 'production'
|
|
51
|
+
run: |
|
|
52
|
+
cd apps/mobile
|
|
53
|
+
eas submit --platform ${{ inputs.platform || 'all' }} --latest --non-interactive
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
name: npm publish
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- 'v*.*.*'
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
permissions:
|
|
10
|
+
contents: read
|
|
11
|
+
id-token: write # required for OIDC trusted publishing
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
publish:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
environment: release
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@v4
|
|
19
|
+
with:
|
|
20
|
+
fetch-depth: 0
|
|
21
|
+
|
|
22
|
+
- uses: pnpm/action-setup@v3
|
|
23
|
+
with:
|
|
24
|
+
version: 10
|
|
25
|
+
|
|
26
|
+
- uses: actions/setup-node@v4
|
|
27
|
+
with:
|
|
28
|
+
node-version: 22
|
|
29
|
+
cache: pnpm
|
|
30
|
+
registry-url: https://registry.npmjs.org
|
|
31
|
+
|
|
32
|
+
- run: pnpm install --frozen-lockfile
|
|
33
|
+
- run: pnpm build
|
|
34
|
+
- run: pnpm publint
|
|
35
|
+
- run: pnpm attw --pack
|
|
36
|
+
- run: npm publish --provenance --access public
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
name: release-please
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- REPLACE_WITH_INTEGRATION_BRANCH
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: write
|
|
10
|
+
pull-requests: write
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
release-please:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
steps:
|
|
16
|
+
- uses: googleapis/release-please-action@v4
|
|
17
|
+
with:
|
|
18
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
19
|
+
release-type: node
|
|
20
|
+
config-file: release-please-config.json
|
|
21
|
+
manifest-file: .release-please-manifest.json
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
name: Release Desktop App
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- 'v*.*.*'
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
release:
|
|
10
|
+
permissions:
|
|
11
|
+
contents: write
|
|
12
|
+
strategy:
|
|
13
|
+
fail-fast: false
|
|
14
|
+
matrix:
|
|
15
|
+
include:
|
|
16
|
+
- platform: macos-14 # Apple Silicon
|
|
17
|
+
target: aarch64-apple-darwin
|
|
18
|
+
- platform: macos-13 # Intel
|
|
19
|
+
target: x86_64-apple-darwin
|
|
20
|
+
|
|
21
|
+
runs-on: ${{ matrix.platform }}
|
|
22
|
+
|
|
23
|
+
steps:
|
|
24
|
+
- uses: actions/checkout@v4
|
|
25
|
+
|
|
26
|
+
- uses: pnpm/action-setup@v3
|
|
27
|
+
with:
|
|
28
|
+
version: 10
|
|
29
|
+
|
|
30
|
+
- uses: actions/setup-node@v4
|
|
31
|
+
with:
|
|
32
|
+
node-version: 22
|
|
33
|
+
cache: pnpm
|
|
34
|
+
|
|
35
|
+
- uses: dtolnay/rust-toolchain@stable
|
|
36
|
+
with:
|
|
37
|
+
targets: ${{ matrix.target }}
|
|
38
|
+
|
|
39
|
+
- uses: swatinem/rust-cache@v2
|
|
40
|
+
with:
|
|
41
|
+
workspaces: apps/desktop/src-tauri
|
|
42
|
+
|
|
43
|
+
- run: pnpm install --frozen-lockfile
|
|
44
|
+
|
|
45
|
+
- name: Write Apple API key to file
|
|
46
|
+
run: |
|
|
47
|
+
mkdir -p ~/private_keys
|
|
48
|
+
echo "$APPLE_API_KEY_CONTENT" > ~/private_keys/AuthKey.p8
|
|
49
|
+
env:
|
|
50
|
+
APPLE_API_KEY_CONTENT: ${{ secrets.APPLE_API_KEY_CONTENT }}
|
|
51
|
+
|
|
52
|
+
- uses: tauri-apps/tauri-action@v0
|
|
53
|
+
env:
|
|
54
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
55
|
+
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
|
|
56
|
+
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
|
|
57
|
+
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
|
|
58
|
+
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
|
|
59
|
+
APPLE_SIGNING_IDENTITY: ${{ secrets.APPLE_SIGNING_IDENTITY }}
|
|
60
|
+
APPLE_API_ISSUER: ${{ secrets.APPLE_API_ISSUER }}
|
|
61
|
+
APPLE_API_KEY: ${{ secrets.APPLE_API_KEY }}
|
|
62
|
+
APPLE_API_KEY_PATH: ~/private_keys/AuthKey.p8
|
|
63
|
+
with:
|
|
64
|
+
projectPath: apps/desktop
|
|
65
|
+
tagName: ${{ github.ref_name }}
|
|
66
|
+
releaseName: 'REPLACE_WITH_APP_NAME ${{ github.ref_name }}'
|
|
67
|
+
releaseDraft: false
|
|
68
|
+
prerelease: false
|
|
69
|
+
args: --target ${{ matrix.target }}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
name: VS Code Marketplace publish
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- 'vscode-v*.*.*'
|
|
7
|
+
workflow_dispatch:
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
publish:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
steps:
|
|
13
|
+
- uses: actions/checkout@v4
|
|
14
|
+
|
|
15
|
+
- uses: pnpm/action-setup@v3
|
|
16
|
+
with:
|
|
17
|
+
version: 10
|
|
18
|
+
|
|
19
|
+
- uses: actions/setup-node@v4
|
|
20
|
+
with:
|
|
21
|
+
node-version: 22
|
|
22
|
+
cache: pnpm
|
|
23
|
+
|
|
24
|
+
- run: pnpm install --frozen-lockfile
|
|
25
|
+
- run: pnpm --filter REPLACE_WITH_EXT_NAME build
|
|
26
|
+
- name: Publish to Marketplace
|
|
27
|
+
env:
|
|
28
|
+
VSCE_PAT: ${{ secrets.VSCE_PAT }}
|
|
29
|
+
run: |
|
|
30
|
+
cd apps/vscode
|
|
31
|
+
npx @vscode/vsce publish --no-yarn
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
---
|
|
2
|
+
scope: org-shared
|
|
3
|
+
name: cbp-ship-configure
|
|
4
|
+
description: Configure shipment for one or more surfaces in the current repo — Vercel link, EAS project + eas.json scaffold, Apple credentials probe, npm publish auth check (including `codebyplan` asset-publish automation via release-please), Railway project link, Supabase access token verify; Supabase GitHub branching integration via /cbp-supabase-setup. Interactive step-by-step; never stores credentials in the repo.
|
|
5
|
+
argument-hint: [--surface=<id>]
|
|
6
|
+
allowed-tools: Read, Write, Edit, Bash(which *), Bash(vercel *), Bash(eas *), Bash(npm *), Bash(railway *), Bash(jq *), Bash(mkdir *), Bash(cp *), Bash(echo *), Skill(cbp-supabase-setup)
|
|
7
|
+
effort: xhigh
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Ship Configure Command
|
|
11
|
+
|
|
12
|
+
Set up shipment for a surface so `/cbp-ship` can deploy it. Each surface is configured independently — runs once per repo per surface, persists in `.codebyplan/shipment.json` `surfaces.{id}`, then never asks again unless re-invoked.
|
|
13
|
+
|
|
14
|
+
## When to Use
|
|
15
|
+
|
|
16
|
+
- First-time shipment setup for a fresh repo
|
|
17
|
+
- Adding a new surface to an existing repo (e.g., adding mobile to a web-only project)
|
|
18
|
+
- Auto-suggested by `/cbp-ship` when it detects a surface that's not configured
|
|
19
|
+
- Rotating credentials (re-runs the credential check, doesn't store anything)
|
|
20
|
+
|
|
21
|
+
## Arguments
|
|
22
|
+
|
|
23
|
+
`$ARGUMENTS`:
|
|
24
|
+
|
|
25
|
+
- `--surface=<id>` — configure one surface. Valid: `vercel-web`, `expo-mobile`, `tauri-desktop`, `npm-package`, `vscode-ext`, `railway-backend`, `supabase`
|
|
26
|
+
- No args — interactive picker; lists undetected/unconfigured surfaces and asks which to set up
|
|
27
|
+
|
|
28
|
+
## Instructions
|
|
29
|
+
|
|
30
|
+
### Step 1 — Pick the surface
|
|
31
|
+
|
|
32
|
+
If `--surface=<id>` is set, use it. Otherwise:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
bash "${CLAUDE_SKILL_DIR}/../ship/scripts/detect-surfaces.sh"
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Show the detection result and ask which to configure via AskUserQuestion (multi-select allowed).
|
|
39
|
+
|
|
40
|
+
### Step 2 — Load the surface configurator
|
|
41
|
+
|
|
42
|
+
For each chosen surface, read its configurator block from this skill's reference. Each block has the same shape:
|
|
43
|
+
|
|
44
|
+
1. **Prerequisites** — what the user must have before starting (e.g., Apple Developer account, Vercel team)
|
|
45
|
+
2. **Probe** — non-destructive checks (CLI installed, credential reachable, account permissions)
|
|
46
|
+
3. **Setup** — the interactive walkthrough
|
|
47
|
+
4. **Persist** — write to `.codebyplan/shipment.json` `surfaces.{id}`
|
|
48
|
+
5. **Verify** — final check that the surface is now ready for `/cbp-ship` to use
|
|
49
|
+
|
|
50
|
+
References:
|
|
51
|
+
|
|
52
|
+
| Surface | Reference |
|
|
53
|
+
| --------------- | ------------------------------------------------------------ |
|
|
54
|
+
| vercel-web | [reference/vercel.md](reference/vercel.md) |
|
|
55
|
+
| expo-mobile | [reference/expo-mobile.md](reference/expo-mobile.md) |
|
|
56
|
+
| tauri-desktop | [reference/tauri-desktop.md](reference/tauri-desktop.md) |
|
|
57
|
+
| npm-package | [reference/npm-package.md](reference/npm-package.md) |
|
|
58
|
+
| vscode-ext | [reference/vscode-ext.md](reference/vscode-ext.md) |
|
|
59
|
+
| railway-backend | [reference/railway-backend.md](reference/railway-backend.md) |
|
|
60
|
+
| supabase | [reference/supabase.md](reference/supabase.md) |
|
|
61
|
+
|
|
62
|
+
**Supabase — branching integration** (run AFTER Step 5 — Verify completes for the
|
|
63
|
+
supabase surface; do NOT invoke during Steps 1–4): once Step 5 has finished and
|
|
64
|
+
`shipment.surfaces.supabase` is persisted, run
|
|
65
|
+
`jq '.shipment.surfaces.supabase.branching_configured // empty' .codebyplan.json`.
|
|
66
|
+
If empty, invoke `/cbp-supabase-setup` (GitHub integration, required-status-check,
|
|
67
|
+
persistent branch). Delegate fully — do NOT duplicate steps inline. If already set,
|
|
68
|
+
note as already-done in the Step 6 report.
|
|
69
|
+
|
|
70
|
+
### Step 3 — Walk the user through setup, step by step
|
|
71
|
+
|
|
72
|
+
This skill NEVER dumps "here's a 200-line guide, follow it." Every step is one-at-a-time, interactive:
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
Step 1/6: Check Vercel CLI is installed
|
|
76
|
+
[runs: which vercel]
|
|
77
|
+
✓ vercel 35.0.1 found at /usr/local/bin/vercel
|
|
78
|
+
|
|
79
|
+
Step 2/6: Check you're logged in
|
|
80
|
+
[runs: vercel whoami]
|
|
81
|
+
✓ Logged in as midevyou
|
|
82
|
+
|
|
83
|
+
Step 3/6: Link this repo to a Vercel project
|
|
84
|
+
You'll run: vercel link
|
|
85
|
+
This creates .vercel/project.json. Choose: existing project / create new.
|
|
86
|
+
|
|
87
|
+
Press Enter when ready to run, or type 'skip' to do it yourself.
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
For commands the user must run (vsce login, npm login, eas login, supabase login — any 2FA/OTP flow), display the command and wait for the user to run it themselves, then verify by re-probing. Never run interactive auth commands via Bash.
|
|
91
|
+
|
|
92
|
+
For commands that are safe to run on the user's behalf (CLI version checks, file scaffolding, JSON read/write), run them directly with the user's pre-confirmation.
|
|
93
|
+
|
|
94
|
+
### Step 4 — Persist what was configured
|
|
95
|
+
|
|
96
|
+
Write to `.codebyplan/shipment.json` (create the file if missing):
|
|
97
|
+
|
|
98
|
+
```json
|
|
99
|
+
{
|
|
100
|
+
"surfaces": {
|
|
101
|
+
"vercel-web": {
|
|
102
|
+
"configured_at": "2026-04-29T14:32:00Z",
|
|
103
|
+
"project_id": "prj_abc123",
|
|
104
|
+
"team_id": "team_xyz789",
|
|
105
|
+
"framework": "nextjs",
|
|
106
|
+
"production_branch": "main"
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
The block contains references and IDs only — NO credentials, tokens, or secrets. Credentials live in:
|
|
113
|
+
|
|
114
|
+
- Vercel: `~/.local/share/com.vercel.cli/auth.json` (CLI session)
|
|
115
|
+
- npm: `~/.npmrc` (auth token) or 2FA per-publish
|
|
116
|
+
- EAS: `~/.expo/state.json` (CLI session)
|
|
117
|
+
- Apple: Keychain + ASC API key files
|
|
118
|
+
- Supabase: `~/.supabase/access-token` (CLI session)
|
|
119
|
+
- Railway: `~/.railway/config.json` (CLI session)
|
|
120
|
+
- vsce (VS Code): `~/.vscode/.vsce` (PAT)
|
|
121
|
+
|
|
122
|
+
The skill's job is to verify these credentials EXIST and are valid; never to store or copy them.
|
|
123
|
+
|
|
124
|
+
### Step 5 — Verify shipment-readiness
|
|
125
|
+
|
|
126
|
+
Run the verification step from the surface reference. For Vercel, this is:
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
vercel inspect "$(jq -r '.surfaces."vercel-web".project_id' .codebyplan/shipment.json)" 2>&1 | head -20
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
If verification passes, mark the surface as configured. If it fails, surface the error and offer to retry the failing step.
|
|
133
|
+
|
|
134
|
+
### Step 6 — Report
|
|
135
|
+
|
|
136
|
+
```
|
|
137
|
+
## Surface configured: vercel-web
|
|
138
|
+
|
|
139
|
+
Project: codebyplan-web (prj_abc123)
|
|
140
|
+
Team: midevy-eu (team_xyz789)
|
|
141
|
+
Framework: Next.js
|
|
142
|
+
Production branch: main
|
|
143
|
+
|
|
144
|
+
Saved to .codebyplan/shipment.json: surfaces.vercel-web
|
|
145
|
+
|
|
146
|
+
Ready for /cbp-ship.
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
If multiple surfaces were configured, list each one's status. If any failed, list those at the end with the next-step prompt.
|
|
150
|
+
|
|
151
|
+
## Re-run safety
|
|
152
|
+
|
|
153
|
+
Re-running on an already-configured surface re-runs the probe (CLI installed? logged in? token still valid?) and refreshes the `.codebyplan/shipment.json` block. It does NOT replace credentials — those stay where the CLI keeps them. This is the primary path for "I rotated my npm token, does shipment still work?" — re-run, the probe catches the bad token immediately.
|
|
154
|
+
|
|
155
|
+
## Special case: opt-in to release-please
|
|
156
|
+
|
|
157
|
+
`release-please` is one of three versioning modes (manual, release-please, changesets). Opt-in is part of npm-package configure:
|
|
158
|
+
|
|
159
|
+
```
|
|
160
|
+
Step N/M: Versioning mode
|
|
161
|
+
A) Manual — bump package.json version yourself before /cbp-ship
|
|
162
|
+
B) release-please — GH Action opens version-bump PRs based on conventional commits (recommended for npm packages)
|
|
163
|
+
C) changesets — manual changeset entries; tooling aggregates into version PRs (recommended for monorepos with many published packages)
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
If B or C, the skill scaffolds the GitHub Actions workflow + config file (`templates/workflows/release-please.yml` or `.changeset/config.json`).
|
|
167
|
+
|
|
168
|
+
## Special case: `codebyplan` asset-publish automation
|
|
169
|
+
|
|
170
|
+
The canonical-owner repo publishes the `codebyplan` npm package — the distribution mechanism for `scope: org-shared` skills/agents/hooks (via its `claude install|update|uninstall` subcommand group). Sibling repos consume it via `npx codebyplan claude update` (the merged CLI; package path `packages/codebyplan-package/`). This branch handles the once-per-repo setup so release-please can autopublish on merge to main. (CHK-132 consolidated the prior standalone `@codebyplan/claude` package into `codebyplan`; the legacy `@codebyplan/claude` package on npm stays un-deprecated at its last published version for backward-compat, but receives no further updates.)
|
|
171
|
+
|
|
172
|
+
When the user picks `--surface=npm-package` AND the detected package is `packages/codebyplan-package`, the walkthrough runs these extra probes / scaffolds in addition to the standard npm-package configurator (see [reference/npm-package.md](reference/npm-package.md)):
|
|
173
|
+
|
|
174
|
+
### Probe 1 — npm whoami
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
npm whoami 2>&1 || echo "RUN: npm login (need: https://www.npmjs.com/login)"
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
If 401 / not logged in, STOP and surface the login URL. Re-run after the user logs in.
|
|
181
|
+
|
|
182
|
+
### Probe 2 — @codebyplan scope membership
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
npm access list packages @codebyplan 2>&1 | head -20
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
Confirms the logged-in account has read on the `@codebyplan` org scope. If 404 / no access:
|
|
189
|
+
|
|
190
|
+
- Either the user does not belong to the `@codebyplan` org → STOP, request invitation from org owner
|
|
191
|
+
- Or the scope is unclaimed → user creates the org at https://www.npmjs.com/org/create (org name `codebyplan`, free public-packages tier)
|
|
192
|
+
|
|
193
|
+
### Scaffold 1 — release-please workflow
|
|
194
|
+
|
|
195
|
+
If `.github/workflows/release-please.yml` is absent:
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
mkdir -p .github/workflows
|
|
199
|
+
cp "${CLAUDE_SKILL_DIR}/../ship/templates/workflow-release-please.yml" .github/workflows/release-please.yml
|
|
200
|
+
# Then replace REPLACE_WITH_INTEGRATION_BRANCH with the production branch from .codebyplan/git.json branch_config.production (typically `main`)
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
The mechanics + commit-prefix → bump-tier mapping live in [../ship/reference/release-please-overview.md](../ship/reference/release-please-overview.md).
|
|
204
|
+
|
|
205
|
+
### Scaffold 2 — release-please-config.json at repo root
|
|
206
|
+
|
|
207
|
+
If `release-please-config.json` is absent:
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
cp "${CLAUDE_SKILL_DIR}/../ship/templates/release-please-config.json" release-please-config.json
|
|
211
|
+
# Then replace REPLACE_WITH_PACKAGE_NAME with codebyplan
|
|
212
|
+
# Confirm `packages."."` block is replaced with `packages."packages/codebyplan-package"`
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### Scaffold 3 — .release-please-manifest.json at repo root
|
|
216
|
+
|
|
217
|
+
If `.release-please-manifest.json` is absent:
|
|
218
|
+
|
|
219
|
+
```bash
|
|
220
|
+
VERSION=$(jq -r '.version' packages/codebyplan-package/package.json)
|
|
221
|
+
echo "{\"packages/codebyplan-package\": \"${VERSION}\"}" > .release-please-manifest.json
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
(Bootstrap version reads from `packages/codebyplan-package/package.json` `version` field at scaffold time.)
|
|
225
|
+
|
|
226
|
+
### Verify — publishConfig.access on the package
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
jq -r '.publishConfig.access // "missing"' packages/codebyplan-package/package.json
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
Required value: `public`. If `missing` or `restricted`, instruct the user to add:
|
|
233
|
+
|
|
234
|
+
```json
|
|
235
|
+
{
|
|
236
|
+
"publishConfig": {
|
|
237
|
+
"access": "public",
|
|
238
|
+
"registry": "https://registry.npmjs.org/"
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### Persist
|
|
244
|
+
|
|
245
|
+
```json
|
|
246
|
+
{
|
|
247
|
+
"surfaces": {
|
|
248
|
+
"npm-package": {
|
|
249
|
+
"packages/codebyplan-package": {
|
|
250
|
+
"package_name": "codebyplan",
|
|
251
|
+
"bin_name": "codebyplan",
|
|
252
|
+
"versioning": "release-please",
|
|
253
|
+
"publish_mode": "release-please-on-merge-to-main",
|
|
254
|
+
"access": "public"
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
After this branch completes, every merge to main with `feat:` / `fix:` / `feat!:` Conventional Commits will trigger release-please to open a version-bump PR. When the maintainer merges that PR, release-please tags the release and `npm publish` runs from the workflow (auth via `NODE_AUTH_TOKEN` GH secret or OIDC trusted publishing — see [../ship/reference/npm-publish-oidc-trusted.md](../ship/reference/npm-publish-oidc-trusted.md)). Siblings then pick up the new asset content via `npx codebyplan claude update`.
|
|
262
|
+
|
|
263
|
+
## Special case: Apple credentials for TestFlight
|
|
264
|
+
|
|
265
|
+
Apple credential setup is by far the most error-prone step. The reference lays out:
|
|
266
|
+
|
|
267
|
+
1. Apple Developer Program enrollment ($99/yr) — user-side, link only
|
|
268
|
+
2. App Store Connect API key creation — user-side, walk-through
|
|
269
|
+
3. Local p8 file storage — user does, skill verifies path
|
|
270
|
+
4. Tauri-style p12 + signing identity — only needed if also configuring tauri-desktop
|
|
271
|
+
5. EAS credentials sync — `eas credentials` walkthrough
|
|
272
|
+
|
|
273
|
+
The configurator confirms each piece is reachable; it never stores them. See [reference/expo-mobile.md](reference/expo-mobile.md) and [reference/tauri-desktop.md](reference/tauri-desktop.md).
|
|
274
|
+
|
|
275
|
+
## Key Rules
|
|
276
|
+
|
|
277
|
+
- **Step-by-step always** — never paste a 200-line "do all of this" block; one step, wait for confirmation, next
|
|
278
|
+
- **Run safe commands directly, instruct unsafe ones** — version checks and JSON edits run via Bash; auth commands and 2FA flows are user-run
|
|
279
|
+
- **Never store credentials in `.codebyplan/repo.json`** — only IDs, project refs, branch names
|
|
280
|
+
- **Re-running is idempotent** — re-runs refresh the probe + persist block, never overwrite credentials
|
|
281
|
+
- **One surface per invocation when via `--surface`** — multi-select picker for the no-args path
|
|
282
|
+
- **Verify at the end** — final probe must succeed before marking configured
|
|
283
|
+
|
|
284
|
+
## Additional resources
|
|
285
|
+
|
|
286
|
+
- Per-surface configurators: [reference/](reference/) — one file per surface
|
|
287
|
+
- GH Actions workflow templates: [scripts/](scripts/) — scaffolded into `.github/workflows/` when versioning mode is opt-in
|
|
288
|
+
- Detection script (shared with `/cbp-ship`): `${CLAUDE_PLUGIN_ROOT}/skills/ship/scripts/detect-surfaces.sh`
|
|
289
|
+
|
|
290
|
+
## Integration
|
|
291
|
+
|
|
292
|
+
- **Triggered by**: user invocation; auto-suggested by `/cbp-ship` when an unconfigured surface is detected
|
|
293
|
+
- **Reads**: `.codebyplan/shipment.json`, repo filesystem (vercel.json, eas.json, supabase/, etc.), CLI session state via probe commands
|
|
294
|
+
- **Writes**: `.codebyplan/shipment.json` `surfaces.{id}`; optionally scaffolds `eas.json`, `vercel.json`, `.github/workflows/*.yml`, `.changeset/config.json` from templates
|
|
295
|
+
- **Calls**: shared detection script; per-surface CLI tools (vercel, eas, supabase, railway, npm, vsce) for probes
|
|
296
|
+
- **Triggers**: returns control to user; if invoked from `/cbp-ship`, returns there for resume
|