arcane-cli 0.38.3 → 1.0.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/README.md +1 -1
- package/dist/assets/.agents/skills/spell-address-review/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-adopt-docs/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-arcane-version/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-architect/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-brainstorm/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-bug/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-bump/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-check-drift/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-close-session/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-commit-work/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-compliance/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-create-pull-request/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-document/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-dotnet-expert/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-eas-store-deploy/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-enchant/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-explain-concept/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-feedback/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-full-cycle/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-generate-bot-icons/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-implement/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-make-discoverable/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-manifest/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-open-session/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-plan/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-present-arcane/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-product-review/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-review/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-review-batch/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-save-idea/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-scope/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-scry/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-security-review/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-ship/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-status/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-suggest-feature/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-summon-venture/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-sync-pull-request/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-test/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-todo/SKILL.md +6 -0
- package/dist/assets/.agents/skills/spell-verification-ledger/SKILL.md +6 -0
- package/dist/assets/.arcane/governance/development-methodology.md +6 -6
- package/dist/assets/.arcane/governance/git-conventions.md +2 -2
- package/dist/assets/.arcane/governance/portable-bootstrap.md +1 -0
- package/dist/assets/.arcane/governance/product-excellence-standards.md +1 -1
- package/dist/assets/.arcane/governance/spell-authoring-standards.md +9 -1
- package/dist/assets/.arcane/governance/universal-agent-rules.md +7 -0
- package/dist/assets/.arcane/spells/spell-address-review.md +115 -0
- package/dist/assets/.arcane/spells/spell-adopt-docs.md +158 -0
- package/dist/assets/.arcane/spells/spell-arcane-version.md +87 -0
- package/dist/assets/.arcane/spells/spell-architect.md +117 -0
- package/dist/assets/.arcane/spells/spell-brainstorm.md +125 -0
- package/dist/assets/.arcane/spells/spell-bug.md +123 -0
- package/dist/assets/.arcane/spells/spell-bump.md +82 -0
- package/dist/assets/.arcane/spells/spell-check-drift.md +118 -0
- package/dist/assets/.arcane/spells/spell-close-session.md +266 -0
- package/dist/assets/.arcane/spells/spell-commit-work.md +279 -0
- package/dist/assets/.arcane/spells/spell-compliance.md +130 -0
- package/dist/assets/.arcane/spells/spell-create-pull-request.md +224 -0
- package/dist/assets/.arcane/spells/spell-document.md +84 -0
- package/dist/assets/.arcane/spells/spell-dotnet-expert.md +118 -0
- package/dist/assets/.arcane/spells/spell-eas-store-deploy.md +254 -0
- package/dist/assets/.arcane/spells/spell-enchant.md +386 -0
- package/dist/assets/.arcane/spells/spell-explain-concept.md +70 -0
- package/dist/assets/.arcane/spells/spell-feedback.md +138 -0
- package/dist/assets/.arcane/spells/spell-full-cycle.md +253 -0
- package/dist/assets/.arcane/spells/spell-generate-bot-icons.md +85 -0
- package/dist/assets/.arcane/spells/spell-implement.md +109 -0
- package/dist/assets/.arcane/spells/spell-make-discoverable.md +293 -0
- package/dist/assets/.arcane/spells/spell-manifest.md +148 -0
- package/dist/assets/.arcane/spells/spell-open-session.md +154 -0
- package/dist/assets/.arcane/spells/spell-plan.md +160 -0
- package/dist/assets/.arcane/spells/spell-present-arcane.md +189 -0
- package/dist/assets/.arcane/spells/spell-product-review.md +98 -0
- package/dist/assets/.arcane/spells/spell-review-batch.md +113 -0
- package/dist/assets/.arcane/spells/spell-review.md +142 -0
- package/dist/assets/.arcane/spells/spell-save-idea.md +117 -0
- package/dist/assets/.arcane/spells/spell-scope.md +266 -0
- package/dist/assets/.arcane/spells/spell-scry.md +124 -0
- package/dist/assets/.arcane/spells/spell-security-review.md +152 -0
- package/dist/assets/.arcane/spells/spell-ship.md +106 -0
- package/dist/assets/.arcane/spells/spell-status.md +86 -0
- package/dist/assets/.arcane/spells/spell-suggest-feature.md +122 -0
- package/dist/assets/.arcane/spells/spell-summon-venture.md +110 -0
- package/dist/assets/.arcane/spells/spell-sync-pull-request.md +161 -0
- package/dist/assets/.arcane/spells/spell-test.md +88 -0
- package/dist/assets/.arcane/spells/spell-todo.md +166 -0
- package/dist/assets/.arcane/spells/spell-verification-ledger.md +102 -0
- package/dist/assets/.claude/commands/spell-address-review.md +2 -2
- package/dist/assets/.claude/commands/spell-adopt-docs.md +2 -2
- package/dist/assets/.claude/commands/spell-arcane-version.md +2 -2
- package/dist/assets/.claude/commands/spell-architect.md +2 -2
- package/dist/assets/.claude/commands/spell-brainstorm.md +2 -2
- package/dist/assets/.claude/commands/spell-bug.md +2 -2
- package/dist/assets/.claude/commands/spell-bump.md +2 -2
- package/dist/assets/.claude/commands/spell-check-drift.md +2 -2
- package/dist/assets/.claude/commands/spell-close-session.md +2 -2
- package/dist/assets/.claude/commands/spell-commit-work.md +2 -2
- package/dist/assets/.claude/commands/spell-compliance.md +2 -2
- package/dist/assets/.claude/commands/spell-create-pull-request.md +2 -2
- package/dist/assets/.claude/commands/spell-document.md +2 -2
- package/dist/assets/.claude/commands/spell-dotnet-expert.md +2 -2
- package/dist/assets/.claude/commands/spell-eas-store-deploy.md +2 -2
- package/dist/assets/.claude/commands/spell-enchant.md +2 -2
- package/dist/assets/.claude/commands/spell-explain-concept.md +2 -2
- package/dist/assets/.claude/commands/spell-feedback.md +2 -2
- package/dist/assets/.claude/commands/spell-full-cycle.md +2 -2
- package/dist/assets/.claude/commands/spell-generate-bot-icons.md +2 -2
- package/dist/assets/.claude/commands/spell-implement.md +2 -2
- package/dist/assets/.claude/commands/spell-make-discoverable.md +2 -2
- package/dist/assets/.claude/commands/spell-manifest.md +2 -2
- package/dist/assets/.claude/commands/spell-open-session.md +2 -2
- package/dist/assets/.claude/commands/spell-plan.md +2 -2
- package/dist/assets/.claude/commands/spell-present-arcane.md +2 -2
- package/dist/assets/.claude/commands/spell-product-review.md +2 -2
- package/dist/assets/.claude/commands/spell-review-batch.md +2 -2
- package/dist/assets/.claude/commands/spell-review.md +2 -2
- package/dist/assets/.claude/commands/spell-save-idea.md +2 -2
- package/dist/assets/.claude/commands/spell-scope.md +2 -2
- package/dist/assets/.claude/commands/spell-scry.md +2 -2
- package/dist/assets/.claude/commands/spell-security-review.md +2 -2
- package/dist/assets/.claude/commands/spell-ship.md +2 -2
- package/dist/assets/.claude/commands/spell-status.md +2 -2
- package/dist/assets/.claude/commands/spell-suggest-feature.md +2 -2
- package/dist/assets/.claude/commands/spell-summon-venture.md +2 -2
- package/dist/assets/.claude/commands/spell-sync-pull-request.md +2 -2
- package/dist/assets/.claude/commands/spell-test.md +2 -2
- package/dist/assets/.claude/commands/spell-todo.md +2 -2
- package/dist/assets/.claude/commands/spell-verification-ledger.md +2 -2
- package/dist/assets/.github/instructions/agent-output.instructions.md +14 -13
- package/dist/assets/.github/prompts/spell-address-review.prompt.md +1 -107
- package/dist/assets/.github/prompts/spell-adopt-docs.prompt.md +1 -150
- package/dist/assets/.github/prompts/spell-arcane-version.prompt.md +1 -79
- package/dist/assets/.github/prompts/spell-architect.prompt.md +1 -109
- package/dist/assets/.github/prompts/spell-brainstorm.prompt.md +1 -117
- package/dist/assets/.github/prompts/spell-bug.prompt.md +1 -115
- package/dist/assets/.github/prompts/spell-bump.prompt.md +1 -74
- package/dist/assets/.github/prompts/spell-check-drift.prompt.md +1 -110
- package/dist/assets/.github/prompts/spell-close-session.prompt.md +1 -258
- package/dist/assets/.github/prompts/spell-commit-work.prompt.md +1 -270
- package/dist/assets/.github/prompts/spell-compliance.prompt.md +1 -122
- package/dist/assets/.github/prompts/spell-create-pull-request.prompt.md +1 -215
- package/dist/assets/.github/prompts/spell-document.prompt.md +1 -76
- package/dist/assets/.github/prompts/spell-dotnet-expert.prompt.md +1 -110
- package/dist/assets/.github/prompts/spell-eas-store-deploy.prompt.md +1 -246
- package/dist/assets/.github/prompts/spell-enchant.prompt.md +1 -378
- package/dist/assets/.github/prompts/spell-explain-concept.prompt.md +1 -62
- package/dist/assets/.github/prompts/spell-feedback.prompt.md +1 -130
- package/dist/assets/.github/prompts/spell-full-cycle.prompt.md +1 -245
- package/dist/assets/.github/prompts/spell-generate-bot-icons.prompt.md +1 -77
- package/dist/assets/.github/prompts/spell-implement.prompt.md +1 -101
- package/dist/assets/.github/prompts/spell-make-discoverable.prompt.md +1 -285
- package/dist/assets/.github/prompts/spell-manifest.prompt.md +1 -140
- package/dist/assets/.github/prompts/spell-open-session.prompt.md +1 -146
- package/dist/assets/.github/prompts/spell-plan.prompt.md +1 -152
- package/dist/assets/.github/prompts/spell-present-arcane.prompt.md +1 -181
- package/dist/assets/.github/prompts/spell-product-review.prompt.md +1 -90
- package/dist/assets/.github/prompts/spell-review-batch.prompt.md +1 -105
- package/dist/assets/.github/prompts/spell-review.prompt.md +1 -134
- package/dist/assets/.github/prompts/spell-save-idea.prompt.md +1 -109
- package/dist/assets/.github/prompts/spell-scope.prompt.md +1 -258
- package/dist/assets/.github/prompts/spell-scry.prompt.md +1 -116
- package/dist/assets/.github/prompts/spell-security-review.prompt.md +1 -144
- package/dist/assets/.github/prompts/spell-ship.prompt.md +1 -98
- package/dist/assets/.github/prompts/spell-status.prompt.md +1 -78
- package/dist/assets/.github/prompts/spell-suggest-feature.prompt.md +1 -114
- package/dist/assets/.github/prompts/spell-summon-venture.prompt.md +1 -102
- package/dist/assets/.github/prompts/spell-sync-pull-request.prompt.md +1 -152
- package/dist/assets/.github/prompts/spell-test.prompt.md +1 -80
- package/dist/assets/.github/prompts/spell-todo.prompt.md +1 -158
- package/dist/assets/.github/prompts/spell-verification-ledger.prompt.md +1 -94
- package/dist/index.js +195 -49
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- /package/dist/assets/{.github/prompts → .arcane/spells}/_fragments/tracking-mode-declaration.md +0 -0
package/dist/index.js
CHANGED
|
@@ -508,148 +508,234 @@ var COMPONENTS = [
|
|
|
508
508
|
// ─── Spells ────────────────────────────────────────────────────────────────
|
|
509
509
|
// Split from the former monolithic `spell-prompts` + `claude-commands` pair
|
|
510
510
|
// so a profile can select spells by capability (see ARC-0NN). Grouping lives
|
|
511
|
-
// here and only here -- every spell file stays flat
|
|
511
|
+
// here and only here -- every spell file stays flat on disk; the one
|
|
512
|
+
// sanctioned relocation is ARC-045's canonical move (CS-03).
|
|
512
513
|
//
|
|
513
|
-
// Each component carries
|
|
514
|
-
//
|
|
515
|
-
// (.
|
|
516
|
-
//
|
|
517
|
-
//
|
|
514
|
+
// Each component carries, per spell, the canonical source and ALL THREE
|
|
515
|
+
// generated client shims (ARC-045 / CS-03): the client-neutral source
|
|
516
|
+
// (.arcane/spells/*.md, always listed first), the Copilot prompt shim
|
|
517
|
+
// (.github/prompts/*.prompt.md), the Claude Code command stub
|
|
518
|
+
// (.claude/commands/*.md), and the Codex skill (.agents/skills/*/SKILL.md,
|
|
519
|
+
// CS-01). They are never independently selectable -- every profile that
|
|
520
|
+
// wanted one always wanted the others -- and pairing them here makes it
|
|
521
|
+
// structurally impossible for a spell's source and its shims to drift
|
|
518
522
|
// apart across profiles.
|
|
519
523
|
{
|
|
520
524
|
name: "spells-session",
|
|
521
525
|
description: "Session lifecycle \u2014 open, close, commit, status, version",
|
|
522
526
|
files: [
|
|
527
|
+
".arcane/spells/spell-open-session.md",
|
|
523
528
|
".github/prompts/spell-open-session.prompt.md",
|
|
524
529
|
".claude/commands/spell-open-session.md",
|
|
530
|
+
".agents/skills/spell-open-session/SKILL.md",
|
|
531
|
+
".arcane/spells/spell-close-session.md",
|
|
525
532
|
".github/prompts/spell-close-session.prompt.md",
|
|
526
533
|
".claude/commands/spell-close-session.md",
|
|
534
|
+
".agents/skills/spell-close-session/SKILL.md",
|
|
535
|
+
".arcane/spells/spell-commit-work.md",
|
|
527
536
|
".github/prompts/spell-commit-work.prompt.md",
|
|
528
537
|
".claude/commands/spell-commit-work.md",
|
|
538
|
+
".agents/skills/spell-commit-work/SKILL.md",
|
|
539
|
+
".arcane/spells/spell-status.md",
|
|
529
540
|
".github/prompts/spell-status.prompt.md",
|
|
530
541
|
".claude/commands/spell-status.md",
|
|
542
|
+
".agents/skills/spell-status/SKILL.md",
|
|
543
|
+
".arcane/spells/spell-arcane-version.md",
|
|
531
544
|
".github/prompts/spell-arcane-version.prompt.md",
|
|
532
|
-
".claude/commands/spell-arcane-version.md"
|
|
545
|
+
".claude/commands/spell-arcane-version.md",
|
|
546
|
+
".agents/skills/spell-arcane-version/SKILL.md"
|
|
533
547
|
]
|
|
534
548
|
},
|
|
535
549
|
{
|
|
536
550
|
name: "spells-capture",
|
|
537
551
|
description: "Idea, todo, feedback and explanation capture",
|
|
538
552
|
files: [
|
|
553
|
+
".arcane/spells/spell-save-idea.md",
|
|
539
554
|
".github/prompts/spell-save-idea.prompt.md",
|
|
540
555
|
".claude/commands/spell-save-idea.md",
|
|
556
|
+
".agents/skills/spell-save-idea/SKILL.md",
|
|
557
|
+
".arcane/spells/spell-todo.md",
|
|
541
558
|
".github/prompts/spell-todo.prompt.md",
|
|
542
559
|
".claude/commands/spell-todo.md",
|
|
560
|
+
".agents/skills/spell-todo/SKILL.md",
|
|
561
|
+
".arcane/spells/spell-feedback.md",
|
|
543
562
|
".github/prompts/spell-feedback.prompt.md",
|
|
544
563
|
".claude/commands/spell-feedback.md",
|
|
564
|
+
".agents/skills/spell-feedback/SKILL.md",
|
|
565
|
+
".arcane/spells/spell-suggest-feature.md",
|
|
545
566
|
".github/prompts/spell-suggest-feature.prompt.md",
|
|
546
567
|
".claude/commands/spell-suggest-feature.md",
|
|
568
|
+
".agents/skills/spell-suggest-feature/SKILL.md",
|
|
569
|
+
".arcane/spells/spell-document.md",
|
|
547
570
|
".github/prompts/spell-document.prompt.md",
|
|
548
571
|
".claude/commands/spell-document.md",
|
|
572
|
+
".agents/skills/spell-document/SKILL.md",
|
|
573
|
+
".arcane/spells/spell-verification-ledger.md",
|
|
549
574
|
".github/prompts/spell-verification-ledger.prompt.md",
|
|
550
575
|
".claude/commands/spell-verification-ledger.md",
|
|
576
|
+
".agents/skills/spell-verification-ledger/SKILL.md",
|
|
577
|
+
".arcane/spells/spell-brainstorm.md",
|
|
551
578
|
".github/prompts/spell-brainstorm.prompt.md",
|
|
552
579
|
".claude/commands/spell-brainstorm.md",
|
|
580
|
+
".agents/skills/spell-brainstorm/SKILL.md",
|
|
581
|
+
".arcane/spells/spell-explain-concept.md",
|
|
553
582
|
".github/prompts/spell-explain-concept.prompt.md",
|
|
554
|
-
".claude/commands/spell-explain-concept.md"
|
|
583
|
+
".claude/commands/spell-explain-concept.md",
|
|
584
|
+
".agents/skills/spell-explain-concept/SKILL.md"
|
|
555
585
|
]
|
|
556
586
|
},
|
|
557
587
|
{
|
|
558
588
|
name: "spells-delivery",
|
|
559
589
|
description: "Pull-request lifecycle \u2014 open a PR, sync a stale one, respond to review feedback",
|
|
560
590
|
files: [
|
|
591
|
+
".arcane/spells/spell-create-pull-request.md",
|
|
561
592
|
".github/prompts/spell-create-pull-request.prompt.md",
|
|
562
593
|
".claude/commands/spell-create-pull-request.md",
|
|
594
|
+
".agents/skills/spell-create-pull-request/SKILL.md",
|
|
595
|
+
".arcane/spells/spell-sync-pull-request.md",
|
|
563
596
|
".github/prompts/spell-sync-pull-request.prompt.md",
|
|
564
597
|
".claude/commands/spell-sync-pull-request.md",
|
|
598
|
+
".agents/skills/spell-sync-pull-request/SKILL.md",
|
|
599
|
+
".arcane/spells/spell-address-review.md",
|
|
565
600
|
".github/prompts/spell-address-review.prompt.md",
|
|
566
|
-
".claude/commands/spell-address-review.md"
|
|
601
|
+
".claude/commands/spell-address-review.md",
|
|
602
|
+
".agents/skills/spell-address-review/SKILL.md"
|
|
567
603
|
]
|
|
568
604
|
},
|
|
569
605
|
{
|
|
570
606
|
name: "spells-review",
|
|
571
607
|
description: "Adversarial code review \u2014 requires source and tests, so excluded from docs-only profiles",
|
|
572
608
|
files: [
|
|
609
|
+
".arcane/spells/spell-review.md",
|
|
573
610
|
".github/prompts/spell-review.prompt.md",
|
|
574
611
|
".claude/commands/spell-review.md",
|
|
612
|
+
".agents/skills/spell-review/SKILL.md",
|
|
613
|
+
".arcane/spells/spell-review-batch.md",
|
|
575
614
|
".github/prompts/spell-review-batch.prompt.md",
|
|
576
|
-
".claude/commands/spell-review-batch.md"
|
|
615
|
+
".claude/commands/spell-review-batch.md",
|
|
616
|
+
".agents/skills/spell-review-batch/SKILL.md"
|
|
577
617
|
]
|
|
578
618
|
},
|
|
579
619
|
{
|
|
580
620
|
name: "spells-planning",
|
|
581
621
|
description: "PRD, architecture, scoping and product review",
|
|
582
622
|
files: [
|
|
623
|
+
".arcane/spells/spell-plan.md",
|
|
583
624
|
".github/prompts/spell-plan.prompt.md",
|
|
584
625
|
".claude/commands/spell-plan.md",
|
|
626
|
+
".agents/skills/spell-plan/SKILL.md",
|
|
627
|
+
".arcane/spells/spell-architect.md",
|
|
585
628
|
".github/prompts/spell-architect.prompt.md",
|
|
586
629
|
".claude/commands/spell-architect.md",
|
|
630
|
+
".agents/skills/spell-architect/SKILL.md",
|
|
631
|
+
".arcane/spells/spell-scope.md",
|
|
587
632
|
".github/prompts/spell-scope.prompt.md",
|
|
588
633
|
".claude/commands/spell-scope.md",
|
|
634
|
+
".agents/skills/spell-scope/SKILL.md",
|
|
635
|
+
".arcane/spells/spell-product-review.md",
|
|
589
636
|
".github/prompts/spell-product-review.prompt.md",
|
|
590
|
-
".claude/commands/spell-product-review.md"
|
|
637
|
+
".claude/commands/spell-product-review.md",
|
|
638
|
+
".agents/skills/spell-product-review/SKILL.md"
|
|
591
639
|
]
|
|
592
640
|
},
|
|
593
641
|
{
|
|
594
642
|
name: "spells-build",
|
|
595
643
|
description: "Code and product delivery \u2014 implementation, tests, stack experts, release, deployment, asset tooling",
|
|
596
644
|
files: [
|
|
645
|
+
".arcane/spells/spell-implement.md",
|
|
597
646
|
".github/prompts/spell-implement.prompt.md",
|
|
598
647
|
".claude/commands/spell-implement.md",
|
|
648
|
+
".agents/skills/spell-implement/SKILL.md",
|
|
649
|
+
".arcane/spells/spell-test.md",
|
|
599
650
|
".github/prompts/spell-test.prompt.md",
|
|
600
651
|
".claude/commands/spell-test.md",
|
|
652
|
+
".agents/skills/spell-test/SKILL.md",
|
|
653
|
+
".arcane/spells/spell-full-cycle.md",
|
|
601
654
|
".github/prompts/spell-full-cycle.prompt.md",
|
|
602
655
|
".claude/commands/spell-full-cycle.md",
|
|
656
|
+
".agents/skills/spell-full-cycle/SKILL.md",
|
|
657
|
+
".arcane/spells/spell-bug.md",
|
|
603
658
|
".github/prompts/spell-bug.prompt.md",
|
|
604
659
|
".claude/commands/spell-bug.md",
|
|
660
|
+
".agents/skills/spell-bug/SKILL.md",
|
|
661
|
+
".arcane/spells/spell-bump.md",
|
|
605
662
|
".github/prompts/spell-bump.prompt.md",
|
|
606
663
|
".claude/commands/spell-bump.md",
|
|
664
|
+
".agents/skills/spell-bump/SKILL.md",
|
|
665
|
+
".arcane/spells/spell-dotnet-expert.md",
|
|
607
666
|
".github/prompts/spell-dotnet-expert.prompt.md",
|
|
608
667
|
".claude/commands/spell-dotnet-expert.md",
|
|
668
|
+
".agents/skills/spell-dotnet-expert/SKILL.md",
|
|
669
|
+
".arcane/spells/spell-security-review.md",
|
|
609
670
|
".github/prompts/spell-security-review.prompt.md",
|
|
610
671
|
".claude/commands/spell-security-review.md",
|
|
672
|
+
".agents/skills/spell-security-review/SKILL.md",
|
|
673
|
+
".arcane/spells/spell-ship.md",
|
|
611
674
|
".github/prompts/spell-ship.prompt.md",
|
|
612
675
|
".claude/commands/spell-ship.md",
|
|
676
|
+
".agents/skills/spell-ship/SKILL.md",
|
|
677
|
+
".arcane/spells/spell-enchant.md",
|
|
613
678
|
".github/prompts/spell-enchant.prompt.md",
|
|
614
679
|
".claude/commands/spell-enchant.md",
|
|
680
|
+
".agents/skills/spell-enchant/SKILL.md",
|
|
681
|
+
".arcane/spells/spell-generate-bot-icons.md",
|
|
615
682
|
".github/prompts/spell-generate-bot-icons.prompt.md",
|
|
616
683
|
".claude/commands/spell-generate-bot-icons.md",
|
|
684
|
+
".agents/skills/spell-generate-bot-icons/SKILL.md",
|
|
685
|
+
".arcane/spells/spell-make-discoverable.md",
|
|
617
686
|
".github/prompts/spell-make-discoverable.prompt.md",
|
|
618
687
|
".claude/commands/spell-make-discoverable.md",
|
|
688
|
+
".agents/skills/spell-make-discoverable/SKILL.md",
|
|
689
|
+
".arcane/spells/spell-scry.md",
|
|
619
690
|
".github/prompts/spell-scry.prompt.md",
|
|
620
691
|
".claude/commands/spell-scry.md",
|
|
692
|
+
".agents/skills/spell-scry/SKILL.md",
|
|
693
|
+
".arcane/spells/spell-eas-store-deploy.md",
|
|
621
694
|
".github/prompts/spell-eas-store-deploy.prompt.md",
|
|
622
695
|
".claude/commands/spell-eas-store-deploy.md",
|
|
696
|
+
".agents/skills/spell-eas-store-deploy/SKILL.md",
|
|
697
|
+
".arcane/spells/spell-compliance.md",
|
|
623
698
|
".github/prompts/spell-compliance.prompt.md",
|
|
624
|
-
".claude/commands/spell-compliance.md"
|
|
699
|
+
".claude/commands/spell-compliance.md",
|
|
700
|
+
".agents/skills/spell-compliance/SKILL.md"
|
|
625
701
|
]
|
|
626
702
|
},
|
|
627
703
|
{
|
|
628
704
|
name: "spells-docs",
|
|
629
705
|
description: "Documentation and records workflows \u2014 adopt an existing document tree",
|
|
630
706
|
files: [
|
|
707
|
+
".arcane/spells/spell-adopt-docs.md",
|
|
631
708
|
".github/prompts/spell-adopt-docs.prompt.md",
|
|
632
|
-
".claude/commands/spell-adopt-docs.md"
|
|
709
|
+
".claude/commands/spell-adopt-docs.md",
|
|
710
|
+
".agents/skills/spell-adopt-docs/SKILL.md"
|
|
633
711
|
]
|
|
634
712
|
},
|
|
635
713
|
{
|
|
636
714
|
name: "spells-venture",
|
|
637
715
|
description: "Hub-only venture management",
|
|
638
716
|
files: [
|
|
717
|
+
".arcane/spells/spell-summon-venture.md",
|
|
639
718
|
".github/prompts/spell-summon-venture.prompt.md",
|
|
640
719
|
".claude/commands/spell-summon-venture.md",
|
|
720
|
+
".agents/skills/spell-summon-venture/SKILL.md",
|
|
721
|
+
".arcane/spells/spell-manifest.md",
|
|
641
722
|
".github/prompts/spell-manifest.prompt.md",
|
|
642
|
-
".claude/commands/spell-manifest.md"
|
|
723
|
+
".claude/commands/spell-manifest.md",
|
|
724
|
+
".agents/skills/spell-manifest/SKILL.md"
|
|
643
725
|
]
|
|
644
726
|
},
|
|
645
727
|
{
|
|
646
728
|
name: "spells-meta",
|
|
647
729
|
description: "Arcane-about-Arcane \u2014 presentation and documentation drift detection",
|
|
648
730
|
files: [
|
|
731
|
+
".arcane/spells/spell-present-arcane.md",
|
|
649
732
|
".github/prompts/spell-present-arcane.prompt.md",
|
|
650
733
|
".claude/commands/spell-present-arcane.md",
|
|
734
|
+
".agents/skills/spell-present-arcane/SKILL.md",
|
|
735
|
+
".arcane/spells/spell-check-drift.md",
|
|
651
736
|
".github/prompts/spell-check-drift.prompt.md",
|
|
652
|
-
".claude/commands/spell-check-drift.md"
|
|
737
|
+
".claude/commands/spell-check-drift.md",
|
|
738
|
+
".agents/skills/spell-check-drift/SKILL.md"
|
|
653
739
|
]
|
|
654
740
|
},
|
|
655
741
|
// Templates
|
|
@@ -2640,13 +2726,9 @@ function isSpellComponent(name) {
|
|
|
2640
2726
|
function categorizeComponents(components) {
|
|
2641
2727
|
const groups = [];
|
|
2642
2728
|
const spellFiles = components.filter((c) => isSpellComponent(c.name)).flatMap((c) => c.files);
|
|
2643
|
-
const
|
|
2644
|
-
if (
|
|
2645
|
-
groups.push({ icon: "\u2728", label: "Copilot
|
|
2646
|
-
}
|
|
2647
|
-
const claudeCount = spellFiles.filter((f) => f.startsWith(".claude/commands/")).length;
|
|
2648
|
-
if (claudeCount > 0) {
|
|
2649
|
-
groups.push({ icon: "\u26A1", label: "Claude Spells", count: claudeCount });
|
|
2729
|
+
const spellCount = spellFiles.filter((f) => f.startsWith(".arcane/spells/")).length;
|
|
2730
|
+
if (spellCount > 0) {
|
|
2731
|
+
groups.push({ icon: "\u2728", label: "Spells (Copilot, Claude Code, Codex)", count: spellCount });
|
|
2650
2732
|
}
|
|
2651
2733
|
const governance = components.filter(
|
|
2652
2734
|
(c) => !isSpellComponent(c.name) && c.name !== "venture-template" && c.name !== "agent-definitions" && c.files.some((f) => f.startsWith(".arcane/governance/"))
|
|
@@ -3493,6 +3575,18 @@ async function fetchPublishedFile(version, relativeAssetPath) {
|
|
|
3493
3575
|
}
|
|
3494
3576
|
}
|
|
3495
3577
|
|
|
3578
|
+
// src/modules/spell-compiler.ts
|
|
3579
|
+
import { parse as parseYaml2 } from "yaml";
|
|
3580
|
+
var CLIENT_SHIM_PATH_PATTERNS = [
|
|
3581
|
+
/^\.github\/prompts\/spell-[a-z0-9-]+\.prompt\.md$/,
|
|
3582
|
+
/^\.claude\/commands\/spell-[a-z0-9-]+\.md$/,
|
|
3583
|
+
/^\.agents\/skills\/spell-[a-z0-9-]+\/SKILL\.md$/
|
|
3584
|
+
];
|
|
3585
|
+
function isClientShimPath(path4) {
|
|
3586
|
+
const normalized = path4.replace(/\\/g, "/").replace(/^\.\//, "");
|
|
3587
|
+
return CLIENT_SHIM_PATH_PATTERNS.some((pattern) => pattern.test(normalized));
|
|
3588
|
+
}
|
|
3589
|
+
|
|
3496
3590
|
// src/commands/update.ts
|
|
3497
3591
|
function migrateLegacyComponents(components) {
|
|
3498
3592
|
const out = [];
|
|
@@ -3530,6 +3624,23 @@ async function resolveOrphan(targetDir, file, recordedHash, prune) {
|
|
|
3530
3624
|
console.log(` Pruned orphaned file: ${file}`);
|
|
3531
3625
|
return "pruned";
|
|
3532
3626
|
}
|
|
3627
|
+
async function findMissingTrackedFiles(targetDir, components) {
|
|
3628
|
+
const missing = [];
|
|
3629
|
+
for (const installed of components) {
|
|
3630
|
+
let component;
|
|
3631
|
+
try {
|
|
3632
|
+
component = getComponent(installed.name);
|
|
3633
|
+
} catch {
|
|
3634
|
+
continue;
|
|
3635
|
+
}
|
|
3636
|
+
if (component.initOnly || component.skipExisting) continue;
|
|
3637
|
+
for (const file of installed.files) {
|
|
3638
|
+
if (!component.files.includes(file)) continue;
|
|
3639
|
+
if (!await fileExists(join8(targetDir, file))) missing.push(file);
|
|
3640
|
+
}
|
|
3641
|
+
}
|
|
3642
|
+
return missing;
|
|
3643
|
+
}
|
|
3533
3644
|
async function runUpdate(options, targetDir, assetsDir, packageVersion) {
|
|
3534
3645
|
let manifest;
|
|
3535
3646
|
try {
|
|
@@ -3572,9 +3683,17 @@ async function runUpdate(options, targetDir, assetsDir, packageVersion) {
|
|
|
3572
3683
|
process.exit(1);
|
|
3573
3684
|
return;
|
|
3574
3685
|
}
|
|
3686
|
+
let sameVersionRestore = false;
|
|
3575
3687
|
if (manifest.version === packageVersion && manifest.components.length > 0) {
|
|
3576
|
-
|
|
3577
|
-
|
|
3688
|
+
const missing = await findMissingTrackedFiles(targetDir, manifest.components);
|
|
3689
|
+
if (missing.length === 0) {
|
|
3690
|
+
console.log("Already up to date.");
|
|
3691
|
+
return;
|
|
3692
|
+
}
|
|
3693
|
+
sameVersionRestore = true;
|
|
3694
|
+
console.log(
|
|
3695
|
+
`${options.dryRun ? "[dry-run] " : ""}Already at v${packageVersion}, but ${missing.length} tracked file${missing.length === 1 ? " is" : "s are"} missing \u2014 restoring.`
|
|
3696
|
+
);
|
|
3578
3697
|
}
|
|
3579
3698
|
if (manifest.components.length === 0) {
|
|
3580
3699
|
console.log("No components installed. Nothing to update.");
|
|
@@ -3583,6 +3702,7 @@ async function runUpdate(options, targetDir, assetsDir, packageVersion) {
|
|
|
3583
3702
|
let fileCount = 0;
|
|
3584
3703
|
const updatedComponents = [];
|
|
3585
3704
|
const conflictedFiles = [];
|
|
3705
|
+
const customizedShims = [];
|
|
3586
3706
|
const orphanReport = [];
|
|
3587
3707
|
const componentsToUpdate = migrateLegacyComponents(manifest.components);
|
|
3588
3708
|
for (const installed of componentsToUpdate) {
|
|
@@ -3615,49 +3735,66 @@ async function runUpdate(options, targetDir, assetsDir, packageVersion) {
|
|
|
3615
3735
|
const srcPath = join8(assetsDir, component.sourceOverrides?.[file] ?? file);
|
|
3616
3736
|
const targetExists = await fileExists(join8(targetDir, file));
|
|
3617
3737
|
const preserveExisting = Boolean(component.skipExisting) && targetExists;
|
|
3738
|
+
const recordedHash = installed.fileHashes?.[file];
|
|
3618
3739
|
if (component.initOnly && !targetExists) {
|
|
3619
3740
|
console.log(
|
|
3620
3741
|
` ! Missing: ${file} \u2014 not added automatically, because doing so would change how Git treats existing files. Run "spell add ${component.name}" if you want it.`
|
|
3621
3742
|
);
|
|
3622
3743
|
continue;
|
|
3623
3744
|
}
|
|
3745
|
+
if (sameVersionRestore) {
|
|
3746
|
+
const tracked = installed.files.includes(file);
|
|
3747
|
+
const restorable = tracked && !targetExists && !component.skipExisting;
|
|
3748
|
+
if (!restorable) {
|
|
3749
|
+
if (tracked) {
|
|
3750
|
+
updatedFiles.push(file);
|
|
3751
|
+
if (recordedHash !== void 0) fileHashes[file] = recordedHash;
|
|
3752
|
+
}
|
|
3753
|
+
continue;
|
|
3754
|
+
}
|
|
3755
|
+
}
|
|
3756
|
+
const editedByOperator = recordedHash !== void 0 && targetExists && !preserveExisting && await hashFile(join8(targetDir, file)) !== recordedHash;
|
|
3624
3757
|
if (preserveExisting) {
|
|
3625
3758
|
console.log(` ${options.dryRun ? "[dry-run] Would preserve" : "Preserved"}: ${file}`);
|
|
3759
|
+
} else if (editedByOperator && isClientShimPath(file)) {
|
|
3760
|
+
customizedShims.push(file);
|
|
3761
|
+
fileHashes[file] = recordedHash;
|
|
3762
|
+
console.log(
|
|
3763
|
+
` ${options.dryRun ? "[dry-run] Would keep" : "Kept"} customized (not merged): ${file}`
|
|
3764
|
+
);
|
|
3626
3765
|
} else if (options.dryRun) {
|
|
3627
|
-
console.log(` [dry-run] Would update: ${file}`);
|
|
3766
|
+
console.log(` [dry-run] Would ${sameVersionRestore ? "restore missing" : "update"}: ${file}`);
|
|
3628
3767
|
fileCount++;
|
|
3629
3768
|
} else {
|
|
3630
|
-
const recordedHash = installed.fileHashes?.[file];
|
|
3631
3769
|
let handled = false;
|
|
3632
|
-
if (
|
|
3633
|
-
const
|
|
3634
|
-
if (
|
|
3635
|
-
|
|
3636
|
-
|
|
3637
|
-
|
|
3638
|
-
|
|
3639
|
-
|
|
3640
|
-
|
|
3770
|
+
if (editedByOperator) {
|
|
3771
|
+
const oldVendorContent = await fetchPublishedFile(installed.installedVersion, file);
|
|
3772
|
+
if (oldVendorContent === void 0) {
|
|
3773
|
+
console.log(
|
|
3774
|
+
` ! Could not fetch the previously published version of ${file} to merge your edits \u2014 left your version untouched. Update it manually if you want the latest.`
|
|
3775
|
+
);
|
|
3776
|
+
fileHashes[file] = recordedHash;
|
|
3777
|
+
handled = true;
|
|
3778
|
+
} else {
|
|
3779
|
+
const [currentContent, newContent] = await Promise.all([
|
|
3780
|
+
readFile6(join8(targetDir, file), "utf-8"),
|
|
3781
|
+
readFile6(srcPath, "utf-8")
|
|
3782
|
+
]);
|
|
3783
|
+
const result = merge3(oldVendorContent, currentContent, newContent);
|
|
3784
|
+
await writeFile8(join8(targetDir, file), result.content, "utf-8");
|
|
3785
|
+
fileHashes[file] = await hashFile(srcPath);
|
|
3786
|
+
if (result.hasConflict) {
|
|
3787
|
+
conflictedFiles.push(file);
|
|
3788
|
+
console.log(` \u26A0 Merge conflict in ${file} \u2014 resolve the <<<<<<< markers before committing.`);
|
|
3641
3789
|
} else {
|
|
3642
|
-
|
|
3643
|
-
readFile6(join8(targetDir, file), "utf-8"),
|
|
3644
|
-
readFile6(srcPath, "utf-8")
|
|
3645
|
-
]);
|
|
3646
|
-
const result = merge3(oldVendorContent, currentContent, newContent);
|
|
3647
|
-
await writeFile8(join8(targetDir, file), result.content, "utf-8");
|
|
3648
|
-
fileHashes[file] = await hashFile(join8(targetDir, file));
|
|
3649
|
-
if (result.hasConflict) {
|
|
3650
|
-
conflictedFiles.push(file);
|
|
3651
|
-
console.log(` \u26A0 Merge conflict in ${file} \u2014 resolve the <<<<<<< markers before committing.`);
|
|
3652
|
-
} else {
|
|
3653
|
-
console.log(` Merged your edits into: ${file}`);
|
|
3654
|
-
}
|
|
3655
|
-
handled = true;
|
|
3790
|
+
console.log(` Merged your edits into: ${file}`);
|
|
3656
3791
|
}
|
|
3792
|
+
handled = true;
|
|
3657
3793
|
}
|
|
3658
3794
|
}
|
|
3659
3795
|
if (!handled) {
|
|
3660
3796
|
fileHashes[file] = await copyFile(srcPath, targetDir, file, { force: true });
|
|
3797
|
+
if (sameVersionRestore) console.log(` Restored missing: ${file}`);
|
|
3661
3798
|
}
|
|
3662
3799
|
fileCount++;
|
|
3663
3800
|
}
|
|
@@ -3710,6 +3847,15 @@ ${verb} ${orphansToReport.length} orphaned file(s) (tracked before this update,
|
|
|
3710
3847
|
console.log(" Run `spell update --prune` to remove the ones that are safe to delete.");
|
|
3711
3848
|
}
|
|
3712
3849
|
}
|
|
3850
|
+
if (customizedShims.length > 0) {
|
|
3851
|
+
const verb = options.dryRun ? "[dry-run] Would keep" : "Kept";
|
|
3852
|
+
console.log(
|
|
3853
|
+
`
|
|
3854
|
+
! ${verb} ${customizedShims.length} customized client file(s) untouched (ARC-045): an edited Copilot prompt, Claude command or Codex skill is never merged into the new generated shim, because a shim carries no prose of its own to merge into.
|
|
3855
|
+
` + customizedShims.map((f) => ` ${f}`).join("\n") + `
|
|
3856
|
+
Each keeps working in its client as-is. To converge: move your edits into the canonical spell (.arcane/spells/<id>.md \u2014 later updates merge edits there), delete the customized file, commit, and run \`spell update\` again \u2014 it restores the generated shim at the current version.`
|
|
3857
|
+
);
|
|
3858
|
+
}
|
|
3713
3859
|
if (options.dryRun) {
|
|
3714
3860
|
console.log(
|
|
3715
3861
|
`
|