arcane-cli 0.39.0 → 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 +1 -1
- package/dist/assets/.agents/skills/spell-adopt-docs/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-arcane-version/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-architect/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-brainstorm/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-bug/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-bump/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-check-drift/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-close-session/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-commit-work/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-compliance/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-create-pull-request/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-document/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-dotnet-expert/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-eas-store-deploy/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-enchant/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-explain-concept/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-feedback/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-full-cycle/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-generate-bot-icons/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-implement/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-make-discoverable/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-manifest/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-open-session/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-plan/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-present-arcane/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-product-review/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-review/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-review-batch/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-save-idea/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-scope/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-scry/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-security-review/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-ship/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-status/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-suggest-feature/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-summon-venture/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-sync-pull-request/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-test/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-todo/SKILL.md +1 -1
- package/dist/assets/.agents/skills/spell-verification-ledger/SKILL.md +1 -1
- 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 +5 -3
- 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 +143 -39
- 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,31 +508,39 @@ 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
|
-
//
|
|
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
|
|
515
518
|
// (.claude/commands/*.md), and the Codex skill (.agents/skills/*/SKILL.md,
|
|
516
519
|
// CS-01). They are never independently selectable -- every profile that
|
|
517
520
|
// wanted one always wanted the others -- and pairing them here makes it
|
|
518
|
-
// structurally impossible for
|
|
519
|
-
// across profiles.
|
|
521
|
+
// structurally impossible for a spell's source and its shims to drift
|
|
522
|
+
// apart across profiles.
|
|
520
523
|
{
|
|
521
524
|
name: "spells-session",
|
|
522
525
|
description: "Session lifecycle \u2014 open, close, commit, status, version",
|
|
523
526
|
files: [
|
|
527
|
+
".arcane/spells/spell-open-session.md",
|
|
524
528
|
".github/prompts/spell-open-session.prompt.md",
|
|
525
529
|
".claude/commands/spell-open-session.md",
|
|
526
530
|
".agents/skills/spell-open-session/SKILL.md",
|
|
531
|
+
".arcane/spells/spell-close-session.md",
|
|
527
532
|
".github/prompts/spell-close-session.prompt.md",
|
|
528
533
|
".claude/commands/spell-close-session.md",
|
|
529
534
|
".agents/skills/spell-close-session/SKILL.md",
|
|
535
|
+
".arcane/spells/spell-commit-work.md",
|
|
530
536
|
".github/prompts/spell-commit-work.prompt.md",
|
|
531
537
|
".claude/commands/spell-commit-work.md",
|
|
532
538
|
".agents/skills/spell-commit-work/SKILL.md",
|
|
539
|
+
".arcane/spells/spell-status.md",
|
|
533
540
|
".github/prompts/spell-status.prompt.md",
|
|
534
541
|
".claude/commands/spell-status.md",
|
|
535
542
|
".agents/skills/spell-status/SKILL.md",
|
|
543
|
+
".arcane/spells/spell-arcane-version.md",
|
|
536
544
|
".github/prompts/spell-arcane-version.prompt.md",
|
|
537
545
|
".claude/commands/spell-arcane-version.md",
|
|
538
546
|
".agents/skills/spell-arcane-version/SKILL.md"
|
|
@@ -542,27 +550,35 @@ var COMPONENTS = [
|
|
|
542
550
|
name: "spells-capture",
|
|
543
551
|
description: "Idea, todo, feedback and explanation capture",
|
|
544
552
|
files: [
|
|
553
|
+
".arcane/spells/spell-save-idea.md",
|
|
545
554
|
".github/prompts/spell-save-idea.prompt.md",
|
|
546
555
|
".claude/commands/spell-save-idea.md",
|
|
547
556
|
".agents/skills/spell-save-idea/SKILL.md",
|
|
557
|
+
".arcane/spells/spell-todo.md",
|
|
548
558
|
".github/prompts/spell-todo.prompt.md",
|
|
549
559
|
".claude/commands/spell-todo.md",
|
|
550
560
|
".agents/skills/spell-todo/SKILL.md",
|
|
561
|
+
".arcane/spells/spell-feedback.md",
|
|
551
562
|
".github/prompts/spell-feedback.prompt.md",
|
|
552
563
|
".claude/commands/spell-feedback.md",
|
|
553
564
|
".agents/skills/spell-feedback/SKILL.md",
|
|
565
|
+
".arcane/spells/spell-suggest-feature.md",
|
|
554
566
|
".github/prompts/spell-suggest-feature.prompt.md",
|
|
555
567
|
".claude/commands/spell-suggest-feature.md",
|
|
556
568
|
".agents/skills/spell-suggest-feature/SKILL.md",
|
|
569
|
+
".arcane/spells/spell-document.md",
|
|
557
570
|
".github/prompts/spell-document.prompt.md",
|
|
558
571
|
".claude/commands/spell-document.md",
|
|
559
572
|
".agents/skills/spell-document/SKILL.md",
|
|
573
|
+
".arcane/spells/spell-verification-ledger.md",
|
|
560
574
|
".github/prompts/spell-verification-ledger.prompt.md",
|
|
561
575
|
".claude/commands/spell-verification-ledger.md",
|
|
562
576
|
".agents/skills/spell-verification-ledger/SKILL.md",
|
|
577
|
+
".arcane/spells/spell-brainstorm.md",
|
|
563
578
|
".github/prompts/spell-brainstorm.prompt.md",
|
|
564
579
|
".claude/commands/spell-brainstorm.md",
|
|
565
580
|
".agents/skills/spell-brainstorm/SKILL.md",
|
|
581
|
+
".arcane/spells/spell-explain-concept.md",
|
|
566
582
|
".github/prompts/spell-explain-concept.prompt.md",
|
|
567
583
|
".claude/commands/spell-explain-concept.md",
|
|
568
584
|
".agents/skills/spell-explain-concept/SKILL.md"
|
|
@@ -572,12 +588,15 @@ var COMPONENTS = [
|
|
|
572
588
|
name: "spells-delivery",
|
|
573
589
|
description: "Pull-request lifecycle \u2014 open a PR, sync a stale one, respond to review feedback",
|
|
574
590
|
files: [
|
|
591
|
+
".arcane/spells/spell-create-pull-request.md",
|
|
575
592
|
".github/prompts/spell-create-pull-request.prompt.md",
|
|
576
593
|
".claude/commands/spell-create-pull-request.md",
|
|
577
594
|
".agents/skills/spell-create-pull-request/SKILL.md",
|
|
595
|
+
".arcane/spells/spell-sync-pull-request.md",
|
|
578
596
|
".github/prompts/spell-sync-pull-request.prompt.md",
|
|
579
597
|
".claude/commands/spell-sync-pull-request.md",
|
|
580
598
|
".agents/skills/spell-sync-pull-request/SKILL.md",
|
|
599
|
+
".arcane/spells/spell-address-review.md",
|
|
581
600
|
".github/prompts/spell-address-review.prompt.md",
|
|
582
601
|
".claude/commands/spell-address-review.md",
|
|
583
602
|
".agents/skills/spell-address-review/SKILL.md"
|
|
@@ -587,9 +606,11 @@ var COMPONENTS = [
|
|
|
587
606
|
name: "spells-review",
|
|
588
607
|
description: "Adversarial code review \u2014 requires source and tests, so excluded from docs-only profiles",
|
|
589
608
|
files: [
|
|
609
|
+
".arcane/spells/spell-review.md",
|
|
590
610
|
".github/prompts/spell-review.prompt.md",
|
|
591
611
|
".claude/commands/spell-review.md",
|
|
592
612
|
".agents/skills/spell-review/SKILL.md",
|
|
613
|
+
".arcane/spells/spell-review-batch.md",
|
|
593
614
|
".github/prompts/spell-review-batch.prompt.md",
|
|
594
615
|
".claude/commands/spell-review-batch.md",
|
|
595
616
|
".agents/skills/spell-review-batch/SKILL.md"
|
|
@@ -599,15 +620,19 @@ var COMPONENTS = [
|
|
|
599
620
|
name: "spells-planning",
|
|
600
621
|
description: "PRD, architecture, scoping and product review",
|
|
601
622
|
files: [
|
|
623
|
+
".arcane/spells/spell-plan.md",
|
|
602
624
|
".github/prompts/spell-plan.prompt.md",
|
|
603
625
|
".claude/commands/spell-plan.md",
|
|
604
626
|
".agents/skills/spell-plan/SKILL.md",
|
|
627
|
+
".arcane/spells/spell-architect.md",
|
|
605
628
|
".github/prompts/spell-architect.prompt.md",
|
|
606
629
|
".claude/commands/spell-architect.md",
|
|
607
630
|
".agents/skills/spell-architect/SKILL.md",
|
|
631
|
+
".arcane/spells/spell-scope.md",
|
|
608
632
|
".github/prompts/spell-scope.prompt.md",
|
|
609
633
|
".claude/commands/spell-scope.md",
|
|
610
634
|
".agents/skills/spell-scope/SKILL.md",
|
|
635
|
+
".arcane/spells/spell-product-review.md",
|
|
611
636
|
".github/prompts/spell-product-review.prompt.md",
|
|
612
637
|
".claude/commands/spell-product-review.md",
|
|
613
638
|
".agents/skills/spell-product-review/SKILL.md"
|
|
@@ -617,45 +642,59 @@ var COMPONENTS = [
|
|
|
617
642
|
name: "spells-build",
|
|
618
643
|
description: "Code and product delivery \u2014 implementation, tests, stack experts, release, deployment, asset tooling",
|
|
619
644
|
files: [
|
|
645
|
+
".arcane/spells/spell-implement.md",
|
|
620
646
|
".github/prompts/spell-implement.prompt.md",
|
|
621
647
|
".claude/commands/spell-implement.md",
|
|
622
648
|
".agents/skills/spell-implement/SKILL.md",
|
|
649
|
+
".arcane/spells/spell-test.md",
|
|
623
650
|
".github/prompts/spell-test.prompt.md",
|
|
624
651
|
".claude/commands/spell-test.md",
|
|
625
652
|
".agents/skills/spell-test/SKILL.md",
|
|
653
|
+
".arcane/spells/spell-full-cycle.md",
|
|
626
654
|
".github/prompts/spell-full-cycle.prompt.md",
|
|
627
655
|
".claude/commands/spell-full-cycle.md",
|
|
628
656
|
".agents/skills/spell-full-cycle/SKILL.md",
|
|
657
|
+
".arcane/spells/spell-bug.md",
|
|
629
658
|
".github/prompts/spell-bug.prompt.md",
|
|
630
659
|
".claude/commands/spell-bug.md",
|
|
631
660
|
".agents/skills/spell-bug/SKILL.md",
|
|
661
|
+
".arcane/spells/spell-bump.md",
|
|
632
662
|
".github/prompts/spell-bump.prompt.md",
|
|
633
663
|
".claude/commands/spell-bump.md",
|
|
634
664
|
".agents/skills/spell-bump/SKILL.md",
|
|
665
|
+
".arcane/spells/spell-dotnet-expert.md",
|
|
635
666
|
".github/prompts/spell-dotnet-expert.prompt.md",
|
|
636
667
|
".claude/commands/spell-dotnet-expert.md",
|
|
637
668
|
".agents/skills/spell-dotnet-expert/SKILL.md",
|
|
669
|
+
".arcane/spells/spell-security-review.md",
|
|
638
670
|
".github/prompts/spell-security-review.prompt.md",
|
|
639
671
|
".claude/commands/spell-security-review.md",
|
|
640
672
|
".agents/skills/spell-security-review/SKILL.md",
|
|
673
|
+
".arcane/spells/spell-ship.md",
|
|
641
674
|
".github/prompts/spell-ship.prompt.md",
|
|
642
675
|
".claude/commands/spell-ship.md",
|
|
643
676
|
".agents/skills/spell-ship/SKILL.md",
|
|
677
|
+
".arcane/spells/spell-enchant.md",
|
|
644
678
|
".github/prompts/spell-enchant.prompt.md",
|
|
645
679
|
".claude/commands/spell-enchant.md",
|
|
646
680
|
".agents/skills/spell-enchant/SKILL.md",
|
|
681
|
+
".arcane/spells/spell-generate-bot-icons.md",
|
|
647
682
|
".github/prompts/spell-generate-bot-icons.prompt.md",
|
|
648
683
|
".claude/commands/spell-generate-bot-icons.md",
|
|
649
684
|
".agents/skills/spell-generate-bot-icons/SKILL.md",
|
|
685
|
+
".arcane/spells/spell-make-discoverable.md",
|
|
650
686
|
".github/prompts/spell-make-discoverable.prompt.md",
|
|
651
687
|
".claude/commands/spell-make-discoverable.md",
|
|
652
688
|
".agents/skills/spell-make-discoverable/SKILL.md",
|
|
689
|
+
".arcane/spells/spell-scry.md",
|
|
653
690
|
".github/prompts/spell-scry.prompt.md",
|
|
654
691
|
".claude/commands/spell-scry.md",
|
|
655
692
|
".agents/skills/spell-scry/SKILL.md",
|
|
693
|
+
".arcane/spells/spell-eas-store-deploy.md",
|
|
656
694
|
".github/prompts/spell-eas-store-deploy.prompt.md",
|
|
657
695
|
".claude/commands/spell-eas-store-deploy.md",
|
|
658
696
|
".agents/skills/spell-eas-store-deploy/SKILL.md",
|
|
697
|
+
".arcane/spells/spell-compliance.md",
|
|
659
698
|
".github/prompts/spell-compliance.prompt.md",
|
|
660
699
|
".claude/commands/spell-compliance.md",
|
|
661
700
|
".agents/skills/spell-compliance/SKILL.md"
|
|
@@ -665,6 +704,7 @@ var COMPONENTS = [
|
|
|
665
704
|
name: "spells-docs",
|
|
666
705
|
description: "Documentation and records workflows \u2014 adopt an existing document tree",
|
|
667
706
|
files: [
|
|
707
|
+
".arcane/spells/spell-adopt-docs.md",
|
|
668
708
|
".github/prompts/spell-adopt-docs.prompt.md",
|
|
669
709
|
".claude/commands/spell-adopt-docs.md",
|
|
670
710
|
".agents/skills/spell-adopt-docs/SKILL.md"
|
|
@@ -674,9 +714,11 @@ var COMPONENTS = [
|
|
|
674
714
|
name: "spells-venture",
|
|
675
715
|
description: "Hub-only venture management",
|
|
676
716
|
files: [
|
|
717
|
+
".arcane/spells/spell-summon-venture.md",
|
|
677
718
|
".github/prompts/spell-summon-venture.prompt.md",
|
|
678
719
|
".claude/commands/spell-summon-venture.md",
|
|
679
720
|
".agents/skills/spell-summon-venture/SKILL.md",
|
|
721
|
+
".arcane/spells/spell-manifest.md",
|
|
680
722
|
".github/prompts/spell-manifest.prompt.md",
|
|
681
723
|
".claude/commands/spell-manifest.md",
|
|
682
724
|
".agents/skills/spell-manifest/SKILL.md"
|
|
@@ -686,9 +728,11 @@ var COMPONENTS = [
|
|
|
686
728
|
name: "spells-meta",
|
|
687
729
|
description: "Arcane-about-Arcane \u2014 presentation and documentation drift detection",
|
|
688
730
|
files: [
|
|
731
|
+
".arcane/spells/spell-present-arcane.md",
|
|
689
732
|
".github/prompts/spell-present-arcane.prompt.md",
|
|
690
733
|
".claude/commands/spell-present-arcane.md",
|
|
691
734
|
".agents/skills/spell-present-arcane/SKILL.md",
|
|
735
|
+
".arcane/spells/spell-check-drift.md",
|
|
692
736
|
".github/prompts/spell-check-drift.prompt.md",
|
|
693
737
|
".claude/commands/spell-check-drift.md",
|
|
694
738
|
".agents/skills/spell-check-drift/SKILL.md"
|
|
@@ -2682,13 +2726,9 @@ function isSpellComponent(name) {
|
|
|
2682
2726
|
function categorizeComponents(components) {
|
|
2683
2727
|
const groups = [];
|
|
2684
2728
|
const spellFiles = components.filter((c) => isSpellComponent(c.name)).flatMap((c) => c.files);
|
|
2685
|
-
const
|
|
2686
|
-
if (
|
|
2687
|
-
groups.push({ icon: "\u2728", label: "Copilot
|
|
2688
|
-
}
|
|
2689
|
-
const claudeCount = spellFiles.filter((f) => f.startsWith(".claude/commands/")).length;
|
|
2690
|
-
if (claudeCount > 0) {
|
|
2691
|
-
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 });
|
|
2692
2732
|
}
|
|
2693
2733
|
const governance = components.filter(
|
|
2694
2734
|
(c) => !isSpellComponent(c.name) && c.name !== "venture-template" && c.name !== "agent-definitions" && c.files.some((f) => f.startsWith(".arcane/governance/"))
|
|
@@ -3535,6 +3575,18 @@ async function fetchPublishedFile(version, relativeAssetPath) {
|
|
|
3535
3575
|
}
|
|
3536
3576
|
}
|
|
3537
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
|
+
|
|
3538
3590
|
// src/commands/update.ts
|
|
3539
3591
|
function migrateLegacyComponents(components) {
|
|
3540
3592
|
const out = [];
|
|
@@ -3572,6 +3624,23 @@ async function resolveOrphan(targetDir, file, recordedHash, prune) {
|
|
|
3572
3624
|
console.log(` Pruned orphaned file: ${file}`);
|
|
3573
3625
|
return "pruned";
|
|
3574
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
|
+
}
|
|
3575
3644
|
async function runUpdate(options, targetDir, assetsDir, packageVersion) {
|
|
3576
3645
|
let manifest;
|
|
3577
3646
|
try {
|
|
@@ -3614,9 +3683,17 @@ async function runUpdate(options, targetDir, assetsDir, packageVersion) {
|
|
|
3614
3683
|
process.exit(1);
|
|
3615
3684
|
return;
|
|
3616
3685
|
}
|
|
3686
|
+
let sameVersionRestore = false;
|
|
3617
3687
|
if (manifest.version === packageVersion && manifest.components.length > 0) {
|
|
3618
|
-
|
|
3619
|
-
|
|
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
|
+
);
|
|
3620
3697
|
}
|
|
3621
3698
|
if (manifest.components.length === 0) {
|
|
3622
3699
|
console.log("No components installed. Nothing to update.");
|
|
@@ -3625,6 +3702,7 @@ async function runUpdate(options, targetDir, assetsDir, packageVersion) {
|
|
|
3625
3702
|
let fileCount = 0;
|
|
3626
3703
|
const updatedComponents = [];
|
|
3627
3704
|
const conflictedFiles = [];
|
|
3705
|
+
const customizedShims = [];
|
|
3628
3706
|
const orphanReport = [];
|
|
3629
3707
|
const componentsToUpdate = migrateLegacyComponents(manifest.components);
|
|
3630
3708
|
for (const installed of componentsToUpdate) {
|
|
@@ -3657,49 +3735,66 @@ async function runUpdate(options, targetDir, assetsDir, packageVersion) {
|
|
|
3657
3735
|
const srcPath = join8(assetsDir, component.sourceOverrides?.[file] ?? file);
|
|
3658
3736
|
const targetExists = await fileExists(join8(targetDir, file));
|
|
3659
3737
|
const preserveExisting = Boolean(component.skipExisting) && targetExists;
|
|
3738
|
+
const recordedHash = installed.fileHashes?.[file];
|
|
3660
3739
|
if (component.initOnly && !targetExists) {
|
|
3661
3740
|
console.log(
|
|
3662
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.`
|
|
3663
3742
|
);
|
|
3664
3743
|
continue;
|
|
3665
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;
|
|
3666
3757
|
if (preserveExisting) {
|
|
3667
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
|
+
);
|
|
3668
3765
|
} else if (options.dryRun) {
|
|
3669
|
-
console.log(` [dry-run] Would update: ${file}`);
|
|
3766
|
+
console.log(` [dry-run] Would ${sameVersionRestore ? "restore missing" : "update"}: ${file}`);
|
|
3670
3767
|
fileCount++;
|
|
3671
3768
|
} else {
|
|
3672
|
-
const recordedHash = installed.fileHashes?.[file];
|
|
3673
3769
|
let handled = false;
|
|
3674
|
-
if (
|
|
3675
|
-
const
|
|
3676
|
-
if (
|
|
3677
|
-
|
|
3678
|
-
|
|
3679
|
-
|
|
3680
|
-
|
|
3681
|
-
|
|
3682
|
-
|
|
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.`);
|
|
3683
3789
|
} else {
|
|
3684
|
-
|
|
3685
|
-
readFile6(join8(targetDir, file), "utf-8"),
|
|
3686
|
-
readFile6(srcPath, "utf-8")
|
|
3687
|
-
]);
|
|
3688
|
-
const result = merge3(oldVendorContent, currentContent, newContent);
|
|
3689
|
-
await writeFile8(join8(targetDir, file), result.content, "utf-8");
|
|
3690
|
-
fileHashes[file] = await hashFile(join8(targetDir, file));
|
|
3691
|
-
if (result.hasConflict) {
|
|
3692
|
-
conflictedFiles.push(file);
|
|
3693
|
-
console.log(` \u26A0 Merge conflict in ${file} \u2014 resolve the <<<<<<< markers before committing.`);
|
|
3694
|
-
} else {
|
|
3695
|
-
console.log(` Merged your edits into: ${file}`);
|
|
3696
|
-
}
|
|
3697
|
-
handled = true;
|
|
3790
|
+
console.log(` Merged your edits into: ${file}`);
|
|
3698
3791
|
}
|
|
3792
|
+
handled = true;
|
|
3699
3793
|
}
|
|
3700
3794
|
}
|
|
3701
3795
|
if (!handled) {
|
|
3702
3796
|
fileHashes[file] = await copyFile(srcPath, targetDir, file, { force: true });
|
|
3797
|
+
if (sameVersionRestore) console.log(` Restored missing: ${file}`);
|
|
3703
3798
|
}
|
|
3704
3799
|
fileCount++;
|
|
3705
3800
|
}
|
|
@@ -3752,6 +3847,15 @@ ${verb} ${orphansToReport.length} orphaned file(s) (tracked before this update,
|
|
|
3752
3847
|
console.log(" Run `spell update --prune` to remove the ones that are safe to delete.");
|
|
3753
3848
|
}
|
|
3754
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
|
+
}
|
|
3755
3859
|
if (options.dryRun) {
|
|
3756
3860
|
console.log(
|
|
3757
3861
|
`
|