arcane-cli 0.14.0 → 0.15.1

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.
Files changed (66) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +253 -253
  3. package/dist/assets/.arcane/agents/agent-policies-template.md +414 -414
  4. package/dist/assets/.arcane/governance/agent-policies.md +414 -414
  5. package/dist/assets/.arcane/governance/agent-work-queue-model.md +61 -61
  6. package/dist/assets/.arcane/governance/cicd-standards.md +227 -227
  7. package/dist/assets/.arcane/governance/development-methodology.md +384 -384
  8. package/dist/assets/.arcane/governance/git-conventions.md +759 -759
  9. package/dist/assets/.arcane/governance/naming-conventions.md +142 -142
  10. package/dist/assets/.arcane/governance/new-business-setup.md +182 -182
  11. package/dist/assets/.arcane/governance/portable-bootstrap.md +101 -101
  12. package/dist/assets/.arcane/governance/product-excellence-standards.md +211 -211
  13. package/dist/assets/.arcane/governance/testing-standards.md +158 -158
  14. package/dist/assets/.arcane/governance/universal-agent-rules.md +108 -108
  15. package/dist/assets/.arcane/image-prompts/adelaide-image-prompt.md +140 -140
  16. package/dist/assets/.arcane/image-prompts/alexander-image-prompt.md +138 -138
  17. package/dist/assets/.arcane/image-prompts/bess-image-prompt.md +139 -139
  18. package/dist/assets/.arcane/image-prompts/circe-image-prompt.md +143 -143
  19. package/dist/assets/.arcane/image-prompts/custodio-image-prompt.md +140 -140
  20. package/dist/assets/.arcane/image-prompts/iris-image-prompt.md +139 -139
  21. package/dist/assets/.arcane/image-prompts/kellar-image-prompt.md +141 -141
  22. package/dist/assets/.arcane/image-prompts/lafayette-image-prompt.md +140 -140
  23. package/dist/assets/.arcane/image-prompts/lince-image-prompt.md +142 -142
  24. package/dist/assets/.arcane/image-prompts/mercurio-image-prompt.md +140 -140
  25. package/dist/assets/.arcane/image-prompts/merlin-image-prompt.md +139 -139
  26. package/dist/assets/.arcane/image-prompts/prospero-image-prompt.md +141 -141
  27. package/dist/assets/.arcane.json +5 -0
  28. package/dist/assets/.claude/commands/spell-enchant.md +9 -9
  29. package/dist/assets/.github/agents/adelaide.agent.md +44 -44
  30. package/dist/assets/.github/agents/alexander.agent.md +43 -43
  31. package/dist/assets/.github/agents/bess.agent.md +42 -42
  32. package/dist/assets/.github/agents/circe.agent.md +43 -43
  33. package/dist/assets/.github/agents/custodio.agent.md +44 -44
  34. package/dist/assets/.github/agents/iris.agent.md +43 -43
  35. package/dist/assets/.github/agents/kellar.agent.md +43 -43
  36. package/dist/assets/.github/agents/lafayette.agent.md +42 -42
  37. package/dist/assets/.github/agents/lince.agent.md +43 -43
  38. package/dist/assets/.github/agents/mercurio.agent.md +43 -43
  39. package/dist/assets/.github/agents/merlin.agent.md +44 -44
  40. package/dist/assets/.github/agents/prospero.agent.md +43 -43
  41. package/dist/assets/.github/prompts/spell-close-session.prompt.md +17 -5
  42. package/dist/assets/.github/prompts/spell-commit-work.prompt.md +24 -6
  43. package/dist/assets/.github/prompts/spell-create-pull-request.prompt.md +12 -3
  44. package/dist/assets/.github/prompts/spell-enchant.prompt.md +385 -385
  45. package/dist/assets/.github/prompts/spell-feedback.prompt.md +113 -113
  46. package/dist/assets/.github/prompts/spell-full-cycle.prompt.md +202 -201
  47. package/dist/assets/.github/prompts/spell-implement.prompt.md +101 -101
  48. package/dist/assets/.github/prompts/spell-open-session.prompt.md +20 -5
  49. package/dist/assets/.github/prompts/spell-scope.prompt.md +263 -263
  50. package/dist/assets/agents/architecture-lead.yaml +61 -61
  51. package/dist/assets/agents/collaborator.yaml +59 -59
  52. package/dist/assets/agents/devops.yaml +60 -60
  53. package/dist/assets/agents/frontend-dev.yaml +60 -60
  54. package/dist/assets/agents/fullstack-dev.yaml +59 -59
  55. package/dist/assets/agents/marketing-strategist.yaml +60 -60
  56. package/dist/assets/agents/mobile-dev.yaml +59 -59
  57. package/dist/assets/agents/operations-comms.yaml +58 -58
  58. package/dist/assets/agents/orchestrator.yaml +60 -60
  59. package/dist/assets/agents/qa-lead.yaml +60 -60
  60. package/dist/assets/agents/research-analyst.yaml +59 -59
  61. package/dist/assets/agents/security-ops.yaml +61 -61
  62. package/dist/index.js +346 -9
  63. package/dist/index.js.map +1 -1
  64. package/package.json +72 -72
  65. package/dist/assets/.claude/commands/spell-eas-ios-deploy.md +0 -9
  66. package/dist/assets/.github/prompts/spell-eas-ios-deploy.prompt.md +0 -183
package/package.json CHANGED
@@ -1,72 +1,72 @@
1
- {
2
- "name": "arcane-cli",
3
- "version": "0.14.0",
4
- "description": "Arcane framework CLI — scaffold and manage governance files in consuming repositories",
5
- "keywords": [
6
- "arcane",
7
- "cli",
8
- "sdlc",
9
- "methodology",
10
- "governance",
11
- "ai-agents",
12
- "agent",
13
- "spell",
14
- "scaffolding",
15
- "templates"
16
- ],
17
- "homepage": "https://github.com/codemagicianhq/arcane#readme",
18
- "bugs": "https://github.com/codemagicianhq/arcane/issues",
19
- "repository": {
20
- "type": "git",
21
- "url": "git+https://github.com/codemagicianhq/arcane.git"
22
- },
23
- "license": "MIT",
24
- "author": "Code Magician LLC",
25
- "type": "module",
26
- "bin": {
27
- "spell": "dist/index.js",
28
- "arcane": "dist/index.js"
29
- },
30
- "files": [
31
- "dist/"
32
- ],
33
- "engines": {
34
- "node": ">=18"
35
- },
36
- "scripts": {
37
- "build": "tsup && tsx scripts/copy-assets.ts",
38
- "test": "vitest run",
39
- "test:watch": "vitest",
40
- "test:coverage": "vitest run --coverage",
41
- "lint": "eslint src test",
42
- "typecheck": "tsc --noEmit",
43
- "check:version-bump": "tsx scripts/check-version-bump.ts",
44
- "prepare": "husky"
45
- },
46
- "dependencies": {
47
- "@inquirer/prompts": "^7.10.1",
48
- "chalk": "^5.6.2",
49
- "commander": "^12.0.0",
50
- "gradient-string": "^3.0.0",
51
- "yaml": "^2.8.3"
52
- },
53
- "devDependencies": {
54
- "@eslint/js": "^9.0.0",
55
- "@types/gradient-string": "^1.1.6",
56
- "@types/node": "^20.0.0",
57
- "@vitest/coverage-v8": "^3.2.7",
58
- "eslint": "^9.0.0",
59
- "husky": "^9.1.7",
60
- "tsup": "^8.0.0",
61
- "tsx": "^4.7.0",
62
- "typescript": "^5.4.0",
63
- "typescript-eslint": "^8.0.0",
64
- "vitest": "^3.2.7"
65
- },
66
- "overrides": {
67
- "esbuild": "^0.28.1"
68
- },
69
- "publishConfig": {
70
- "registry": "https://registry.npmjs.org/"
71
- }
72
- }
1
+ {
2
+ "name": "arcane-cli",
3
+ "version": "0.15.1",
4
+ "description": "Arcane framework CLI — scaffold and manage governance files in consuming repositories",
5
+ "keywords": [
6
+ "arcane",
7
+ "cli",
8
+ "sdlc",
9
+ "methodology",
10
+ "governance",
11
+ "ai-agents",
12
+ "agent",
13
+ "spell",
14
+ "scaffolding",
15
+ "templates"
16
+ ],
17
+ "homepage": "https://github.com/codemagicianhq/arcane#readme",
18
+ "bugs": "https://github.com/codemagicianhq/arcane/issues",
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "git+https://github.com/codemagicianhq/arcane.git"
22
+ },
23
+ "license": "MIT",
24
+ "author": "Code Magician LLC",
25
+ "type": "module",
26
+ "bin": {
27
+ "spell": "dist/index.js",
28
+ "arcane": "dist/index.js"
29
+ },
30
+ "files": [
31
+ "dist/"
32
+ ],
33
+ "engines": {
34
+ "node": ">=18"
35
+ },
36
+ "scripts": {
37
+ "build": "tsup && tsx scripts/copy-assets.ts",
38
+ "test": "vitest run",
39
+ "test:watch": "vitest",
40
+ "test:coverage": "vitest run --coverage",
41
+ "lint": "eslint src test",
42
+ "typecheck": "tsc --noEmit",
43
+ "check:version-bump": "tsx scripts/check-version-bump.ts",
44
+ "prepare": "husky"
45
+ },
46
+ "dependencies": {
47
+ "@inquirer/prompts": "^7.10.1",
48
+ "chalk": "^5.6.2",
49
+ "commander": "^12.0.0",
50
+ "gradient-string": "^3.0.0",
51
+ "yaml": "^2.8.3"
52
+ },
53
+ "devDependencies": {
54
+ "@eslint/js": "^9.0.0",
55
+ "@types/gradient-string": "^1.1.6",
56
+ "@types/node": "^20.0.0",
57
+ "@vitest/coverage-v8": "^3.2.7",
58
+ "eslint": "^9.0.0",
59
+ "husky": "^9.1.7",
60
+ "tsup": "^8.0.0",
61
+ "tsx": "^4.7.0",
62
+ "typescript": "^5.4.0",
63
+ "typescript-eslint": "^8.0.0",
64
+ "vitest": "^3.2.7"
65
+ },
66
+ "overrides": {
67
+ "esbuild": "^0.28.1"
68
+ },
69
+ "publishConfig": {
70
+ "registry": "https://registry.npmjs.org/"
71
+ }
72
+ }
@@ -1,9 +0,0 @@
1
- # EAS iOS Deploy
2
-
3
- Invoke the Arcane `spell-eas-ios-deploy` spell workflow.
4
-
5
- See the full prompt at `.github/prompts/spell-eas-ios-deploy.prompt.md` for the complete workflow definition.
6
-
7
- ---
8
-
9
- @.github/prompts/spell-eas-ios-deploy.prompt.md
@@ -1,183 +0,0 @@
1
- ---
2
- name: Spell — EAS iOS Deploy
3
- description: Ship an Expo/React Native app to TestFlight and the App Store via EAS Build + EAS Submit — initial one-time setup and every deploy after that
4
- argument-hint: What you need — "initial setup", "deploy" (cut + submit a new build), or a specific symptom (e.g. "capability sync failed", "build stuck")
5
- agent: agent
6
- ---
7
-
8
- ## Executive Summary
9
-
10
- - This prompt ships an Expo/React Native app to Apple TestFlight/App Store using **EAS Build + EAS
11
- Submit** — Expo's cloud build service. No local Mac or Xcode install is required.
12
- - Covers two flows: **initial one-time setup** (Apple enrollment → credentials → first build →
13
- first submit) and **repeat deployments** (the two-command loop you run for every release after that).
14
- - Produces a signed production build uploaded to App Store Connect, visible in TestFlight once Apple
15
- finishes processing it, with the app's native build number bumped and committed to the repo.
16
- - **Not** a general CI/CD ship spell — see `spell-ship` for the branch-merge / backend-deploy
17
- lifecycle. This spell is the mobile-app-store-specific leaf step, and it is scoped deliberately to
18
- the **EAS Build/Submit** tech stack — it does not cover local Xcode builds, Xcode Cloud, or Fastlane.
19
- A team on one of those instead needs a different spell; the steps below assume EAS.
20
-
21
- ---
22
-
23
- Ship the app to TestFlight/App Store, or troubleshoot an EAS deploy issue, per the request in the
24
- prompt argument. If no argument was given, ask whether this is initial setup or a repeat deploy.
25
-
26
- ### Placeholders
27
-
28
- Resolve each from `.arcane.json` / the project's `app.json` / `eas.json` / frontmatter; **ask the
29
- user rather than guessing or inventing a value** if any is unset. Never proceed with an unresolved
30
- placeholder still in a command you're about to run.
31
-
32
- | Placeholder | What it is | Where it lives once resolved |
33
- | --- | --- | --- |
34
- | `{APP_NAME}` | Display name shown on the App Store / home screen | `app.json` → `expo.name` |
35
- | `{BUNDLE_ID}` | iOS bundle identifier (and Android package, if shipping both) | `app.json` → `expo.ios.bundleIdentifier` |
36
- | `{APPLE_TEAM_ID}` | Apple Developer Team ID | `eas.json` → `submit.production.ios.appleTeamId` |
37
- | `{ASC_APP_ID}` | Numeric App Store Connect app ID | `eas.json` → `submit.production.ios.ascAppId` |
38
- | `{APPLE_ID_EMAIL}` | Apple ID used for the Developer/ASC account | `eas.json` → `submit.production.ios.appleId` |
39
- | `{EAS_PROJECT_ID}` | EAS/Expo project ID | `app.json` → `expo.extra.eas.projectId` |
40
- | `{EAS_ACCOUNT}` | EAS/Expo account or org slug the project lives under | `eas build`/`eas submit` output, or `eas whoami` |
41
-
42
- ### Context files this spell reads
43
-
44
- - **`app.json`/`app.config.js`** (Expo config) — bundle identifier, current `version`, native
45
- `buildNumber`, EAS project ID. If it doesn't exist, this isn't an Expo project — stop and say so.
46
- - **`eas.json`** — build + submit profiles. **If missing**, run `eas build:configure` first (it
47
- scaffolds a starter `eas.json` interactively) before continuing with the steps below.
48
- - **Apple Developer Program membership** for `{APPLE_ID_EMAIL}` — must be an active, paid enrollment.
49
- If you don't know whether it's active, ask the user to confirm at
50
- developer.apple.com/account before starting initial setup — everything downstream depends on it.
51
-
52
- If **none** of these exist yet (a brand-new Expo project with no `eas.json` and no App Store Connect
53
- app record), start at **Phase A, step 1** — every step is written to work from that empty state.
54
-
55
- ---
56
-
57
- ## Phase A — Initial one-time setup
58
-
59
- Run once per app. Skip to Phase B if `eas.json` already has a `submit.production.ios` block and a
60
- first build has already reached TestFlight.
61
-
62
- 1. **Confirm Apple Developer Program enrollment** is active for `{APPLE_ID_EMAIL}` (paid,
63
- developer.apple.com/account). Nothing below works without it.
64
- 2. **Create the App Store Connect app record** — appstoreconnect.apple.com → My Apps → "+" → New App.
65
- Fill in `{APP_NAME}`, `{BUNDLE_ID}` (create a matching Identifier first if one doesn't exist yet),
66
- a SKU, and user access. Capture the numeric app ID it's assigned — that's `{ASC_APP_ID}`.
67
- 3. **Log in to EAS**: `npx eas-cli login` (skip if already authenticated — `eas whoami` confirms).
68
- 4. **Configure `eas.json`** if it doesn't already have what's needed:
69
- ```jsonc
70
- {
71
- "cli": { "appVersionSource": "local" },
72
- "build": {
73
- "production": { "channel": "production", "autoIncrement": true }
74
- },
75
- "submit": {
76
- "production": {
77
- "ios": {
78
- "appleId": "{APPLE_ID_EMAIL}",
79
- "ascAppId": "{ASC_APP_ID}",
80
- "appleTeamId": "{APPLE_TEAM_ID}"
81
- }
82
- }
83
- }
84
- }
85
- ```
86
- `appVersionSource: "local"` + `autoIncrement: true` on the build profile means EAS bumps the
87
- native build number in `app.json` for you on every build — no manual version-bump step, ever.
88
- 5. **First build**: `eas build --platform ios --profile production`. On a project with no
89
- credentials yet, EAS interactively generates everything it needs **remotely** — Distribution
90
- Certificate, Provisioning Profile, and (if the app uses push) an APNs key. No local keychain, no
91
- Mac. Confirm each prompt; let EAS manage the private key material — you should never need to see
92
- or copy it.
93
- 6. **First submit**: `eas submit --platform ios --profile production --latest`. First time through,
94
- it also sets up an **App Store Connect API key** for non-interactive submits (EAS-managed is
95
- simplest — pick that unless there's a reason to upload your own). Confirm the role it grants when
96
- asked (App Manager is enough for build submission).
97
- 7. **Confirm it landed**: App Store Connect → your app → TestFlight → iOS builds. Apple's binary
98
- processing takes ~5–10 minutes after a successful `eas submit` before the build appears there.
99
-
100
- ## Phase B — Repeat deployments
101
-
102
- The two-command loop for every release after Phase A:
103
-
104
- 1. Land the code changes; typecheck/build clean locally first.
105
- 2. `eas build --platform ios --profile production --non-interactive`
106
- (add `EXPO_NO_CAPABILITY_SYNC=1` up front if you know a capability-sync failure is coming —
107
- see **Known pitfalls** below).
108
- 3. `eas submit --platform ios --profile production --latest --non-interactive`
109
- 4. **Commit the build-number bump**: step 2's `autoIncrement` rewrote `app.json`'s native build
110
- number locally — `git add`/`git commit` it so the repo matches the binary that just shipped.
111
- 5. Confirm in TestFlight (same as Phase A step 7).
112
-
113
- Re-running either command is always safe: `eas build` reuses existing valid credentials rather than
114
- regenerating them (it only creates new ones when something actually changed, like a new capability),
115
- and re-running `eas submit` after a failed attempt is a normal retry, not a duplicate submission risk.
116
-
117
- ## Known pitfalls (verified, not hypothetical)
118
-
119
- - **"Failed to patch capabilities: X ON, Y OFF"** — happens when the App Store Connect app record is
120
- already linked to `{BUNDLE_ID}` and Apple rejects EAS's automatic capability sync. Fix: set
121
- `EXPO_NO_CAPABILITY_SYNC=1` for the build command, **and** manually toggle the capability (Push
122
- Notifications, Sign in with Apple, Associated Domains, whatever the app just added) on in the Apple
123
- Developer console under Identifiers → `{BUNDLE_ID}` → Capabilities. EAS syncing capabilities and you
124
- toggling them by hand are two ways to the same end state; when the app is already linked, only the
125
- manual toggle works.
126
- - **"Command must be re-run to pick up new updates configuration"** — EAS auto-installed
127
- `expo-updates` mid-build because the config needed it and it wasn't present. Just re-run the exact
128
- same build command once; it picks up cleanly the second time.
129
- - **A brand-new entitlement was just added** (e.g. Associated Domains, Sign in with Apple) — confirm
130
- the App ID capability is toggled on in the Apple Developer console *before* building. A successful
131
- build with a fresh "Provisioning Profile ... Updated: N seconds ago" in the credentials output is
132
- itself the confirmation that the new entitlement is correctly provisioned — if the capability isn't
133
- on yet, the build will fail at the signing step instead.
134
- - **Apple "Internal Server Error"** during API key creation or submission — Apple's servers are
135
- occasionally flaky. Retry the identical command; no code or config change needed.
136
- - **Build succeeds but nothing changed on-device** — before assuming the deploy is broken, rule out
137
- the mundane cause first: the tester didn't force-quit and reopen the app after installing the new
138
- TestFlight build (a backgrounded process can survive an update). Confirm the visible build/version
139
- number inside the app (a settings screen, an About row) matches what you just shipped before
140
- debugging further.
141
-
142
- ## Acceptance checklist
143
-
144
- - [ ] `eas build` output ends with "Build finished" and an artifact URL.
145
- - [ ] `eas submit` output ends with "Submitted your app to Apple App Store Connect!"
146
- - [ ] App Store Connect → TestFlight → iOS builds shows the new build number (allow 5–10 min for
147
- Apple's processing).
148
- - [ ] The `autoIncrement`-bumped build number in `app.json` is committed — `git status` is clean.
149
- - [ ] If an entitlement changed this deploy, it visibly works on a fresh install of the new build.
150
-
151
- ## Cross-references
152
-
153
- - **`spell-ship`** — the surrounding branch-merge / backend-CI-CD lifecycle, if this app ships
154
- alongside a paired backend. This spell is the mobile-store-specific leaf step; run it after
155
- `spell-ship`'s checklist is green for anything the app depends on, not instead of it.
156
- - **`spell-dotnet-expert`** and other stack-expert spells — the sibling "load expertise into any
157
- agent" pattern. This spell goes one step further: it doesn't just load context, it executes the
158
- actual build/submit commands.
159
- - **`spell-bump`** — coordinate with it if the app's marketing `version` (not just the native build
160
- number this spell auto-increments) also needs a bump before shipping.
161
- - **`spell-todo`** — if a pitfall or gap surfaces mid-deploy that shouldn't block shipping today,
162
- capture it there rather than scope-creeping this deploy.
163
-
164
- ## Rules
165
-
166
- - **Never guess a placeholder.** If `{BUNDLE_ID}`, `{APPLE_TEAM_ID}`, `{ASC_APP_ID}`, or
167
- `{APPLE_ID_EMAIL}` is unresolved, ask — do not invent a value or proceed with a literal placeholder
168
- string in a real command.
169
- - **Never handle real credential material.** You should never need to see, paste, or commit a
170
- Distribution Certificate private key, an App Store Connect API private key (`.p8`), or any
171
- password — EAS manages all of it remotely. If a step seems to require pasting one, stop; something
172
- is set up wrong.
173
- - **Confirm before `eas submit`.** Submitting puts a real binary in front of Apple's review /
174
- TestFlight testers — it's outward-facing and not something to undo casually. Say what you're about
175
- to submit and to which environment before running it.
176
- - **Confirm before setting `EXPO_NO_CAPABILITY_SYNC=1`.** Explain why it's needed (it disables an
177
- automatic sync that would otherwise silently turn a capability off) rather than setting it
178
- silently.
179
- - **Never force-regenerate credentials** (revoke + recreate a Distribution Certificate or
180
- Provisioning Profile) without explicit confirmation — revoking a certificate invalidates every
181
- build ever signed with it, including ones already live.
182
- - **A backend/API prod deploy the app depends on is a separate, separately-confirmed action.** Do
183
- not fold it into a mobile build/submit step just because they're related.