@floh-solutions/pharos-cli 0.32.0 → 0.33.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 +131 -31
- package/dist/capabilities.d.ts +27 -0
- package/dist/capabilities.d.ts.map +1 -1
- package/dist/capabilities.js +144 -41
- package/dist/capabilities.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +55 -14
- package/dist/cli.js.map +1 -1
- package/dist/commands/delegate.d.ts +139 -6
- package/dist/commands/delegate.d.ts.map +1 -1
- package/dist/commands/delegate.js +511 -133
- package/dist/commands/delegate.js.map +1 -1
- package/dist/commands/doctor.d.ts +30 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +303 -39
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/pr.d.ts +56 -0
- package/dist/commands/pr.d.ts.map +1 -0
- package/dist/commands/pr.js +202 -0
- package/dist/commands/pr.js.map +1 -0
- package/dist/commands/setup.js +21 -3
- package/dist/commands/setup.js.map +1 -1
- package/dist/delegate/argus.d.ts +111 -2
- package/dist/delegate/argus.d.ts.map +1 -1
- package/dist/delegate/argus.js +99 -1
- package/dist/delegate/argus.js.map +1 -1
- package/dist/delegate/vsix.d.ts +26 -0
- package/dist/delegate/vsix.d.ts.map +1 -1
- package/dist/delegate/vsix.js +22 -5
- package/dist/delegate/vsix.js.map +1 -1
- package/package.json +2 -2
- package/skill/SKILL.md +32 -9
- package/vscode/pharos-bridge.json +1 -1
- package/vscode/pharos-bridge.vsix +0 -0
package/README.md
CHANGED
|
@@ -549,6 +549,34 @@ connectivity fault worded as a credential fault. `gh-auth` therefore never tells
|
|
|
549
549
|
you that you are signed out; it reports both causes, because from here they are
|
|
550
550
|
genuinely indistinguishable.
|
|
551
551
|
|
|
552
|
+
### The skill serves both agents
|
|
553
|
+
|
|
554
|
+
`pharos setup --install skill` installs the skill from the floh-skills
|
|
555
|
+
marketplace into **every coding agent on the machine**: Claude Code, Codex, or
|
|
556
|
+
both when both are found. Codex reads the same Claude-format
|
|
557
|
+
`.claude-plugin/marketplace.json` and generates its own `.codex-plugin/plugin.json`
|
|
558
|
+
from it, so one publish reaches both.
|
|
559
|
+
|
|
560
|
+
`doctor` reports them as two rows — `skill` for Claude Code, `skill-codex` for
|
|
561
|
+
Codex — and emits each only when that agent is on PATH, so a machine running one
|
|
562
|
+
of them does not get a column of red about the other. **Publishing a new version
|
|
563
|
+
does not update an installed one**, and the command that picks one up differs:
|
|
564
|
+
|
|
565
|
+
| agent | update |
|
|
566
|
+
|---|---|
|
|
567
|
+
| Claude Code | `claude plugin update pharos@floh-skills` |
|
|
568
|
+
| Codex | `codex plugin marketplace upgrade floh-skills` then `codex plugin add pharos@floh-skills` |
|
|
569
|
+
|
|
570
|
+
Codex needs the two because `codex plugin marketplace add` is a no-op once the
|
|
571
|
+
marketplace is configured and does **not** refresh the snapshot it fetched the
|
|
572
|
+
first time — so `plugin add` alone reinstalls whatever was published back then.
|
|
573
|
+
`--install skill` runs the refresh for you, and reports per agent which got it.
|
|
574
|
+
|
|
575
|
+
`pharos setup --skill` is something else and stays Claude-only: a personal copy
|
|
576
|
+
in `~/.claude/skills/`, which **shadows** the marketplace one and stops receiving
|
|
577
|
+
corrections. It is for a machine that cannot use plugins, and Codex has no such
|
|
578
|
+
machine — `codex plugin` ships with the CLI.
|
|
579
|
+
|
|
552
580
|
## Delegating a work item to a coding agent
|
|
553
581
|
|
|
554
582
|
```bash
|
|
@@ -605,6 +633,8 @@ extensions at all. `--dry-run` carries the same array.
|
|
|
605
633
|
```bash
|
|
606
634
|
pharos delegate --host navarch --agent claude --folder ~/Developer/widgets --text "Fetch …"
|
|
607
635
|
pharos delegate --host navarch --agent claude --folder … --list
|
|
636
|
+
pharos delegate --host navarch --agent claude --folder … --session 1958E897-… --text "…"
|
|
637
|
+
pharos delegate --host navarch --agent claude --folder … --gh-account alisina-tibata --text "…"
|
|
608
638
|
pharos delegate --host navarch --agent claude --folder … --status 89933CD2-…
|
|
609
639
|
```
|
|
610
640
|
|
|
@@ -638,7 +668,7 @@ different facts. Pass `delegation.request` back as `--status <request>` to turn
|
|
|
638
668
|
that into `sent`, `launched`, `declined` or `delivery-failed`; argus keeps the
|
|
639
669
|
row for an hour, sized for a person at lunch rather than for a poll.
|
|
640
670
|
|
|
641
|
-
The socket adds
|
|
671
|
+
The socket adds ten `reason` ids, and they are separate because **each names a
|
|
642
672
|
different fix**:
|
|
643
673
|
|
|
644
674
|
| `reason` | what is true | the fix |
|
|
@@ -652,6 +682,7 @@ different fix**:
|
|
|
652
682
|
| `rate-limited` | twelve operator writes a minute, and this was the thirteenth | wait a minute |
|
|
653
683
|
| `not-an-operator` | the gate refused the stamp pharos sets on every request | almost always a daemon that predates it |
|
|
654
684
|
| `request-unknown` | `--status` for an id this core does not hold | it aged out, or was made elsewhere |
|
|
685
|
+
| `gh-account-unknown` | `--gh-account` named an identity this core has never heard of, and a worker would be started | add it in Navarch ▸ Accounts, or pass a spelling it knows — the refusal lists them |
|
|
655
686
|
|
|
656
687
|
`argusd-outdated` is the one to expect first, and it is not a bug: argusd
|
|
657
688
|
outliving the app is the feature that keeps sessions alive across a restart, so
|
|
@@ -671,21 +702,33 @@ without — so a correct delegation is refused for not carrying one, and a calle
|
|
|
671
702
|
that believed the message would go and add it. **The tell is the missing
|
|
672
703
|
`reason` key, never the prose.**
|
|
673
704
|
|
|
674
|
-
`--list`
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
705
|
+
`--list` asks `delegate_candidates` — **the find, asked rather than
|
|
706
|
+
performed** (argus #1402). The rows are argusd's own answer to its own
|
|
707
|
+
question, ranked by its own rule: not exited, the right kind, local, not
|
|
708
|
+
holding a board mission, and **not an Argus Agent** — an operator is a claude
|
|
709
|
+
worker with no mission sitting in a base checkout, which is exactly the folder
|
|
710
|
+
a person links in Pharos, and delegating into it would hand the work item to
|
|
711
|
+
the thing that drives the fleet. Ties break on `starting` last and then on
|
|
712
|
+
ascending UUID, never on status, so two calls a second apart name the same
|
|
713
|
+
pane. `recommended` is the daemon's own `target`. A row's `id` is the worker
|
|
714
|
+
UUID, its `status` is the contract's `idle`/`busy`/`unknown` — with
|
|
715
|
+
**`needs_input` reported `busy`**, because a worker on a trust dialog is idle
|
|
716
|
+
by every measure except the one that matters.
|
|
717
|
+
|
|
718
|
+
The answer carries **`source`**, which is not a footnote:
|
|
719
|
+
|
|
720
|
+
| `source` | what the list is | what `--session` / `--gh-account` do |
|
|
721
|
+
|---|---|---|
|
|
722
|
+
| `daemon` | `delegate_candidates` — a row it offered is a row it accepts | honoured |
|
|
723
|
+
| `fleet_status` | this CLI's own reading, a prediction of the find | refused `argusd-outdated` |
|
|
724
|
+
|
|
725
|
+
An argusd that predates #1402 answers the read `unknown-op`, and `fleet_status`
|
|
726
|
+
answers on *every* generation of argusd — so the list is still worth serving,
|
|
727
|
+
and it is served with `source: "fleet_status"` and a sentence saying the pick
|
|
728
|
+
cannot be honoured against that daemon. One that predates `delegate` itself
|
|
729
|
+
carries no `reason` key at all, and that is `argusd-outdated`: listing workers
|
|
730
|
+
a send is about to refuse to touch would hand the app a menu of picks that can
|
|
731
|
+
only fail.
|
|
689
732
|
|
|
690
733
|
Two things the route does **not** do. It never pre-checks the agent on `PATH`:
|
|
691
734
|
argusd spawns the worker from the app's own login shell, and a GUI-launched
|
|
@@ -695,14 +738,66 @@ multi-line prompt into one line — the receiving TUI submits on Enter and Navar
|
|
|
695
738
|
owns that Enter, so several lines is a usage error rather than a rewrite nobody
|
|
696
739
|
proof-read.
|
|
697
740
|
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
741
|
+
### Picking a worker, and the daemon that would ignore the pick
|
|
742
|
+
|
|
743
|
+
`--session <uuid>` travels as the op's `worker`, and `--session new` as
|
|
744
|
+
`worker: "new"` — a fresh worker even where the find would have had one. The
|
|
745
|
+
CLI does **not** re-check the pick before sending it: argusd validates `worker`
|
|
746
|
+
against the very predicate `delegate_candidates` listed from, so one rule
|
|
747
|
+
serves the find, the list and the validation, and a second copy here could only
|
|
748
|
+
disagree with it. A row the read offered is a row the send accepts.
|
|
749
|
+
|
|
750
|
+
A pick it will not take comes back as **`session-gone`**, keeping argusd's own
|
|
751
|
+
sentence — which names *which* of six it was: *has exited*, *is an Argus Agent*,
|
|
752
|
+
*is holding mission #N*, *is a codex worker, not claude*, *is on ax52, not on
|
|
753
|
+
this Mac*, *is in … , not in …*. That is the same fact and the same fix as a
|
|
754
|
+
vanished pid on Terminal, so it is the same word. (`session-not-targetable` was
|
|
755
|
+
this route's own refusal and is **gone from the closed set** — it meant the op
|
|
756
|
+
could not express a target at all, and it can.)
|
|
757
|
+
|
|
758
|
+
**A daemon that predates #1402 does not refuse these flags — it ignores them.**
|
|
759
|
+
`delegate` reads the keys it knows and discards the rest, so a `worker` it has
|
|
760
|
+
never heard of is dropped, the find runs anyway, and the answer is `sent` about
|
|
761
|
+
a pane nobody chose; a `gh_account` is dropped the same way and the worker
|
|
762
|
+
starts as whoever `gh` was last logged in as. Nothing in the reply says either
|
|
763
|
+
happened. So `--session` and `--gh-account` ask `delegate_candidates` first —
|
|
764
|
+
it landed in the same change, so serving it is proof both fields are read — and
|
|
765
|
+
refuse `argusd-outdated` with nothing sent when it is not served. `pharos
|
|
766
|
+
doctor`'s `argus-delegate` row reports the same fact before anybody hits it.
|
|
767
|
+
|
|
768
|
+
### The GitHub account a started worker runs as
|
|
769
|
+
|
|
770
|
+
```bash
|
|
771
|
+
pharos delegate --host navarch --agent claude --folder … \
|
|
772
|
+
--gh-account alisina-tibata --text "Fetch Azure DevOps work item #4821 …"
|
|
773
|
+
```
|
|
774
|
+
|
|
775
|
+
`--gh-account` takes a **GitHub login, or the label of an account bound in
|
|
776
|
+
Navarch** — argusd resolves it against its own `accounts.json`, label first and
|
|
777
|
+
then login, case-insensitively and read fresh on every call. Two spellings
|
|
778
|
+
because two systems name one identity differently: Navarch knows a label a
|
|
779
|
+
human picked, and a caller outside Argus knows the login. The flag is held to a
|
|
780
|
+
login-shaped token (no spaces), so a label containing a space cannot be named
|
|
781
|
+
through it — pass the login, which always resolves.
|
|
782
|
+
|
|
783
|
+
Three rules, all argusd's:
|
|
784
|
+
|
|
785
|
+
- **A worker it STARTS runs as that account.** An account it does not know is
|
|
786
|
+
refused `gh-account-unknown`, never substituted — a worker with no binding
|
|
787
|
+
runs as whatever `gh` was last logged in as, and a hand-off that commits
|
|
788
|
+
under the wrong identity is the failure the resolution exists to prevent. The
|
|
789
|
+
refusal lists every label and login the core holds.
|
|
790
|
+
- **A prompt that lands in a worker already running leaves its account alone**,
|
|
791
|
+
and says so in the reply: a session already on the project is already running
|
|
792
|
+
as somebody, and re-checking would refuse hand-offs that are perfectly fine.
|
|
793
|
+
- **There is no fallback**, in either direction.
|
|
794
|
+
|
|
795
|
+
On `terminal`, `vscode` and `vscode-insiders` the flag is accepted, ignored,
|
|
796
|
+
and said to be — those hosts hand the prompt to a session in an app that is
|
|
797
|
+
already running as whoever this machine is logged in as, and only Navarch
|
|
798
|
+
starts a session on your behalf. An empty `--gh-account ""` is a usage error
|
|
799
|
+
rather than "no account asked for": a caller whose variable came out empty must
|
|
800
|
+
not silently get the wrong identity.
|
|
706
801
|
|
|
707
802
|
### Picking one of several
|
|
708
803
|
|
|
@@ -717,8 +812,9 @@ malformed id is a usage error rather than `session-gone`, because the latter is
|
|
|
717
812
|
a fact about the machine and would tell somebody their session had died when it
|
|
718
813
|
never existed.
|
|
719
814
|
|
|
720
|
-
On the
|
|
721
|
-
|
|
815
|
+
On Navarch the pick is a worker UUID and travels as the op's own `worker` — see
|
|
816
|
+
*Picking a worker* above. On the VS Code hosts it travels in the URI as
|
|
817
|
+
`session=<pid>`, and the bridge honours it — from **0.2.0**. An older bridge refuses any query key it
|
|
722
818
|
does not know, so it would reject the whole URI and send nothing; `--session`
|
|
723
819
|
against one is therefore refused `bridge-not-installed` here rather than
|
|
724
820
|
reported as sent, and `pharos doctor` marks such a bridge not ok so the wizard
|
|
@@ -729,12 +825,16 @@ detail }` — `pending` only on `navarch`, where it carries a `delegation` block
|
|
|
729
825
|
A refusal is `{ ok: false, reason, detail }` on stdout with exit 2, `reason`
|
|
730
826
|
being one of `host-not-installed`, `agent-not-installed`,
|
|
731
827
|
`bridge-not-installed`, `automation-denied`, `folder-missing`, `unsupported`,
|
|
732
|
-
`session-gone`,
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
828
|
+
`session-gone`, plus the Argus socket's ten tabulated above — stable ids,
|
|
829
|
+
because the app renders facts. **`session-not-targetable` is no longer one of
|
|
830
|
+
them**: it meant the `delegate` op could not name a worker, which stopped being
|
|
831
|
+
true with argus #1402, and a dead id in a closed set is a fix the app builds
|
|
832
|
+
for a state that cannot happen. `pharos doctor` carries the rows behind them:
|
|
833
|
+
`terminal`, `vscode`, `vscode-insiders`, `navarch`, `claude`, `codex`, per
|
|
834
|
+
installed VS Code flavour `<host>-claude-ext`, `<host>-codex-ext`,
|
|
736
835
|
`<host>-bridge`, and — only where Navarch is installed — `argus-delegate`, which
|
|
737
|
-
asks the **running** `argusd` whether it serves the verb
|
|
836
|
+
asks the **running** `argusd` whether it serves the verb, and then whether it
|
|
837
|
+
also reads a target worker and a GitHub account. That last one is a row
|
|
738
838
|
of its own because argusd outlives the app: a current Navarch in `/Applications`
|
|
739
839
|
and a daemon from last week are an ordinary state, and the daemon is what
|
|
740
840
|
decides. It offers no `install`, because the fix is a reload that ends every live
|
package/dist/capabilities.d.ts
CHANGED
|
@@ -52,6 +52,24 @@ export interface CapabilityOutcome {
|
|
|
52
52
|
* reading the sentence. Absent on every other capability.
|
|
53
53
|
*/
|
|
54
54
|
flavours?: BridgeInstallOutcome["flavours"];
|
|
55
|
+
/**
|
|
56
|
+
* `skill` only, and the same idea one layer over: one entry per coding agent
|
|
57
|
+
* found on this machine, so a wizard can say *Claude Code got it, Codex did
|
|
58
|
+
* not* rather than parsing a sentence for it (#1399). Absent on every other
|
|
59
|
+
* capability; an empty array when no agent was found at all.
|
|
60
|
+
*/
|
|
61
|
+
agents?: SkillAgentOutcome[];
|
|
62
|
+
}
|
|
63
|
+
/** The agents that can install the skill. Both read the same marketplace. */
|
|
64
|
+
export type SkillAgent = "claude" | "codex";
|
|
65
|
+
export interface SkillAgentOutcome {
|
|
66
|
+
agent: SkillAgent;
|
|
67
|
+
/** How it is spelled to a person, matching the `doctor` row's name. */
|
|
68
|
+
name: string;
|
|
69
|
+
ok: boolean;
|
|
70
|
+
/** The last command run for this agent, so a transcript shows what happened. */
|
|
71
|
+
command: string | null;
|
|
72
|
+
detail: string;
|
|
55
73
|
}
|
|
56
74
|
export declare const INSTALLABLE: Capability[];
|
|
57
75
|
/** Install the named capabilities, one at a time, reporting each. */
|
|
@@ -61,4 +79,13 @@ export declare function installCapabilities(ids: readonly string[], options?: {
|
|
|
61
79
|
onCommand?: (command: string) => void;
|
|
62
80
|
onProgress?: (fraction: number, stage: string) => void;
|
|
63
81
|
}): Promise<CapabilityOutcome[]>;
|
|
82
|
+
/** The marketplace this skill ships from. Public, and ours. */
|
|
83
|
+
export declare const MARKETPLACE = "ASNNetworks/floh-skills";
|
|
84
|
+
/**
|
|
85
|
+
* What both agents call it once it is added — the repository name, not the
|
|
86
|
+
* `owner/repo` source. `codex plugin list --marketplace <name>` and the
|
|
87
|
+
* `@<name>` half of {@link PLUGIN} are the same string, so it is spelled once.
|
|
88
|
+
*/
|
|
89
|
+
export declare const MARKETPLACE_NAME = "floh-skills";
|
|
90
|
+
export declare const PLUGIN = "pharos@floh-skills";
|
|
64
91
|
//# sourceMappingURL=capabilities.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAKA,OAAO,EAAiB,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAI9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,MAAM,WAAW,UAAU;IACzB,mEAAmE;IACnE,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,OAAO,CAAC;IACZ,qEAAqE;IACrE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,QAAQ,CAAC,EAAE,oBAAoB,CAAC,UAAU,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAKA,OAAO,EAAiB,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAI9E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,MAAM,WAAW,UAAU;IACzB,mEAAmE;IACnE,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,OAAO,CAAC;IACZ,qEAAqE;IACrE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,QAAQ,CAAC,EAAE,oBAAoB,CAAC,UAAU,CAAC,CAAC;IAC5C;;;;;OAKG;IACH,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC9B;AAED,6EAA6E;AAC7E,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE5C,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,UAAU,CAAC;IAClB,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,OAAO,CAAC;IACZ,gFAAgF;IAChF,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AA0CD,eAAO,MAAM,WAAW,EAAE,UAAU,EAwDnC,CAAC;AAEF,qEAAqE;AACrE,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,SAAS,MAAM,EAAE,EACtB,OAAO,GAAE;IACP,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,gEAAgE;IAChE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnD,GACL,OAAO,CAAC,iBAAiB,EAAE,CAAC,CA2B9B;AAaD,+DAA+D;AAC/D,eAAO,MAAM,WAAW,4BAA4B,CAAC;AACrD;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,gBAAgB,CAAC;AAC9C,eAAO,MAAM,MAAM,uBAA+B,CAAC"}
|
package/dist/capabilities.js
CHANGED
|
@@ -44,11 +44,15 @@ const PACKAGES = {
|
|
|
44
44
|
},
|
|
45
45
|
};
|
|
46
46
|
export const INSTALLABLE = [
|
|
47
|
+
// **One capability, every agent on the machine** (#1399). `doctor` reports it
|
|
48
|
+
// per agent — `skill`, `skill-codex` — and this is the single install both
|
|
49
|
+
// rows name, exactly like the two VS Code bridge rows below.
|
|
47
50
|
{
|
|
48
51
|
id: "skill",
|
|
49
52
|
name: "The pharos skill",
|
|
50
|
-
unlocks: "Claude Code
|
|
51
|
-
+ "
|
|
53
|
+
unlocks: "Claude Code and Codex learn this tool exists — whichever of them is on this machine, and "
|
|
54
|
+
+ "both when both are. Without it a session does not know to reach for pharos at all, "
|
|
55
|
+
+ "which is the difference between a CLI you installed and one that gets used.",
|
|
52
56
|
size: "a few hundred KB",
|
|
53
57
|
},
|
|
54
58
|
{
|
|
@@ -130,10 +134,64 @@ function convertOutcome(result) {
|
|
|
130
134
|
};
|
|
131
135
|
}
|
|
132
136
|
/** The marketplace this skill ships from. Public, and ours. */
|
|
133
|
-
const MARKETPLACE = "ASNNetworks/floh-skills";
|
|
134
|
-
const PLUGIN = "pharos@floh-skills";
|
|
137
|
+
export const MARKETPLACE = "ASNNetworks/floh-skills";
|
|
135
138
|
/**
|
|
136
|
-
*
|
|
139
|
+
* What both agents call it once it is added — the repository name, not the
|
|
140
|
+
* `owner/repo` source. `codex plugin list --marketplace <name>` and the
|
|
141
|
+
* `@<name>` half of {@link PLUGIN} are the same string, so it is spelled once.
|
|
142
|
+
*/
|
|
143
|
+
export const MARKETPLACE_NAME = "floh-skills";
|
|
144
|
+
export const PLUGIN = `pharos@${MARKETPLACE_NAME}`;
|
|
145
|
+
/**
|
|
146
|
+
* What each agent has to be told, in order, to install the skill from the
|
|
147
|
+
* marketplace.
|
|
148
|
+
*
|
|
149
|
+
* **Both agents read the same `.claude-plugin/marketplace.json`** — Codex
|
|
150
|
+
* generates its own `.codex-plugin/plugin.json` scoped to `./skills/pharos`
|
|
151
|
+
* from it — so this is one skill published once, reaching whichever agents are
|
|
152
|
+
* here. Every command below is idempotent and exits 0 when already done, which
|
|
153
|
+
* is what makes them safe in a wizard somebody runs twice (measured: Codex
|
|
154
|
+
* answers `alreadyAdded: true`).
|
|
155
|
+
*
|
|
156
|
+
* **Codex has a third step and it is the one that matters.** `codex plugin
|
|
157
|
+
* marketplace add` is a no-op when the marketplace is already configured, and
|
|
158
|
+
* it does NOT refresh the git snapshot it fetched the first time — so `plugin
|
|
159
|
+
* add` straight after it installs whatever was published back then. That is
|
|
160
|
+
* this repository's published-is-not-delivered trap in a new place, and
|
|
161
|
+
* `marketplace upgrade` is what closes it. It is `optional` because a refresh
|
|
162
|
+
* needs the network and a stale skill beats no skill: a failure there is
|
|
163
|
+
* reported and the install continues.
|
|
164
|
+
*/
|
|
165
|
+
const SKILL_AGENTS = [
|
|
166
|
+
{
|
|
167
|
+
agent: "claude",
|
|
168
|
+
name: "Claude Code",
|
|
169
|
+
binary: "claude",
|
|
170
|
+
steps: [
|
|
171
|
+
{ args: ["plugin", "marketplace", "add", MARKETPLACE] },
|
|
172
|
+
{ args: ["plugin", "install", PLUGIN] },
|
|
173
|
+
],
|
|
174
|
+
update: `\`claude plugin update ${PLUGIN}\``,
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
agent: "codex",
|
|
178
|
+
name: "Codex",
|
|
179
|
+
binary: "codex",
|
|
180
|
+
steps: [
|
|
181
|
+
{ args: ["plugin", "marketplace", "add", MARKETPLACE] },
|
|
182
|
+
{
|
|
183
|
+
args: ["plugin", "marketplace", "upgrade", MARKETPLACE_NAME],
|
|
184
|
+
optional: true,
|
|
185
|
+
whenSkipped: "the marketplace snapshot could not be refreshed, so what was installed may be "
|
|
186
|
+
+ "behind what is published",
|
|
187
|
+
},
|
|
188
|
+
{ args: ["plugin", "add", PLUGIN] },
|
|
189
|
+
],
|
|
190
|
+
update: `\`codex plugin marketplace upgrade ${MARKETPLACE_NAME}\` then \`codex plugin add ${PLUGIN}\``,
|
|
191
|
+
},
|
|
192
|
+
];
|
|
193
|
+
/**
|
|
194
|
+
* Install the skill as a PLUGIN, into every coding agent on this machine.
|
|
137
195
|
*
|
|
138
196
|
* ## Why this is not `setup --skill`
|
|
139
197
|
*
|
|
@@ -142,13 +200,18 @@ const PLUGIN = "pharos@floh-skills";
|
|
|
142
200
|
* to floh-skills silently stops arriving. That flag is for a machine that
|
|
143
201
|
* cannot use plugins, and it stays that way.
|
|
144
202
|
*
|
|
145
|
-
* This does what the printed hint always told people to do by hand
|
|
203
|
+
* This does what the printed hint always told people to do by hand, now for
|
|
204
|
+
* both agents rather than one — see {@link SKILL_AGENTS}.
|
|
146
205
|
*
|
|
147
|
-
*
|
|
148
|
-
* claude plugin install pharos@floh-skills
|
|
206
|
+
* ## Both when both are found (#1399)
|
|
149
207
|
*
|
|
150
|
-
*
|
|
151
|
-
*
|
|
208
|
+
* Found the day @user asked whether Codex could reach pharos on this machine:
|
|
209
|
+
* the CLI was on the login PATH, the skill was installed for Claude Code, and
|
|
210
|
+
* Codex had the marketplace configured and had never installed pharos from it.
|
|
211
|
+
* Nothing on the machine reported that, and the fix was two commands typed by
|
|
212
|
+
* hand. So this installs for every agent it finds, and reports **per agent**
|
|
213
|
+
* which got it: a half-install that reads as done is the failure this whole
|
|
214
|
+
* file is arranged against.
|
|
152
215
|
*
|
|
153
216
|
* ## Why it matters more than it looks
|
|
154
217
|
*
|
|
@@ -157,53 +220,93 @@ const PLUGIN = "pharos@floh-skills";
|
|
|
157
220
|
* an agent knows to use it before being told.
|
|
158
221
|
*/
|
|
159
222
|
async function installSkillPlugin(options) {
|
|
160
|
-
//
|
|
161
|
-
//
|
|
162
|
-
//
|
|
163
|
-
|
|
164
|
-
|
|
223
|
+
// **Probed against the env this was GIVEN, not `process.env`** — the doctor's
|
|
224
|
+
// rule, and it is how the macOS app hands over a login-shell PATH. A GUI
|
|
225
|
+
// -launched app inherits roughly `/usr/bin:/bin`, so probing the wrong
|
|
226
|
+
// environment concludes "no agents here" on a machine running both.
|
|
227
|
+
const env = options.env ?? process.env;
|
|
228
|
+
const present = [];
|
|
229
|
+
for (const agent of SKILL_AGENTS) {
|
|
230
|
+
try {
|
|
231
|
+
await run(agent.binary, ["--version"], { timeout: 15_000, env });
|
|
232
|
+
present.push(agent);
|
|
233
|
+
}
|
|
234
|
+
catch {
|
|
235
|
+
// Not here. A legitimate state, not a failure to install something:
|
|
236
|
+
// antigravity and a plain shell both use this CLI and have no plugin
|
|
237
|
+
// system at all.
|
|
238
|
+
}
|
|
165
239
|
}
|
|
166
|
-
|
|
240
|
+
if (present.length === 0) {
|
|
167
241
|
return {
|
|
168
242
|
id: "skill",
|
|
169
243
|
ok: false,
|
|
170
244
|
command: null,
|
|
171
|
-
|
|
245
|
+
agents: [],
|
|
246
|
+
detail: "Neither `claude` nor `codex` is on PATH, so there is no plugin system to install into. "
|
|
172
247
|
+ "If you are using a different agent, point it at the skill in the floh-skills "
|
|
173
248
|
+ "repository, or run `pharos setup --skill` for a personal copy.",
|
|
174
249
|
};
|
|
175
250
|
}
|
|
176
|
-
const
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
251
|
+
const agents = [];
|
|
252
|
+
for (const agent of present) {
|
|
253
|
+
agents.push(await installSkillFor(agent, env, options.onCommand));
|
|
254
|
+
}
|
|
255
|
+
const installed = agents.filter((outcome) => outcome.ok);
|
|
256
|
+
const summary = agents.map((outcome) => `${outcome.name}: ${outcome.detail}`).join(" ");
|
|
257
|
+
return {
|
|
258
|
+
id: "skill",
|
|
259
|
+
// Every agent found, or it is not done. A tick box that goes green while
|
|
260
|
+
// one of two agents still has no idea pharos exists is the exact shape of
|
|
261
|
+
// the bug this replaces.
|
|
262
|
+
ok: agents.every((outcome) => outcome.ok),
|
|
263
|
+
command: agents.at(-1)?.command ?? null,
|
|
264
|
+
agents,
|
|
265
|
+
// **Said out loud, because it is the step people miss.** Installing the
|
|
266
|
+
// plugin does not load it into a session already running, and publishing a
|
|
267
|
+
// new version does not update an installed one. A skill silently seven
|
|
268
|
+
// versions behind is how a correction that shipped weeks ago keeps not
|
|
269
|
+
// arriving — and the command that picks it up is different per agent.
|
|
270
|
+
detail: installed.length === 0
|
|
271
|
+
? summary
|
|
272
|
+
: `${summary} Restart the agent to load it. Later, publishing a new skill does NOT `
|
|
273
|
+
+ "update an installed copy; what picks up a correction is "
|
|
274
|
+
+ `${installed.map((outcome) => `${updateCommand(outcome.agent)} for ${outcome.name}`).join(", ")}.`,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
/** What picks up a published correction for one agent. Never the same string. */
|
|
278
|
+
function updateCommand(agent) {
|
|
279
|
+
return SKILL_AGENTS.find((candidate) => candidate.agent === agent).update;
|
|
280
|
+
}
|
|
281
|
+
/** One agent's steps, stopping at the first required one that fails. */
|
|
282
|
+
async function installSkillFor(agent, env, onCommand) {
|
|
283
|
+
const base = { agent: agent.agent, name: agent.name };
|
|
284
|
+
const skipped = [];
|
|
285
|
+
let last = null;
|
|
286
|
+
for (const step of agent.steps) {
|
|
287
|
+
const command = `${agent.binary} ${step.args.join(" ")}`;
|
|
288
|
+
onCommand?.(command);
|
|
183
289
|
try {
|
|
184
|
-
await run(
|
|
290
|
+
await run(agent.binary, step.args, {
|
|
291
|
+
timeout: 5 * 60_000,
|
|
292
|
+
maxBuffer: 4 * 1024 * 1024,
|
|
293
|
+
env,
|
|
294
|
+
});
|
|
295
|
+
last = command;
|
|
185
296
|
}
|
|
186
297
|
catch (error) {
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
ok: false,
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
};
|
|
298
|
+
const failure = `\`${command}\` failed: ${error instanceof Error ? error.message : String(error)}`;
|
|
299
|
+
if (step.optional !== true) {
|
|
300
|
+
return { ...base, ok: false, command, detail: failure };
|
|
301
|
+
}
|
|
302
|
+
skipped.push(`${failure} — ${step.whenSkipped ?? "carrying on"}`);
|
|
193
303
|
}
|
|
194
304
|
}
|
|
195
305
|
return {
|
|
196
|
-
|
|
306
|
+
...base,
|
|
197
307
|
ok: true,
|
|
198
|
-
command:
|
|
199
|
-
|
|
200
|
-
// plugin does not load it into a session already running, and publishing a
|
|
201
|
-
// new version does not update an installed one — `claude plugin update`
|
|
202
|
-
// does. A skill silently seven versions behind is how a correction that
|
|
203
|
-
// shipped weeks ago keeps not arriving.
|
|
204
|
-
detail: "Installed from the marketplace. Restart Claude Code to load it. Later, "
|
|
205
|
-
+ "`claude plugin update pharos@floh-skills` picks up published corrections — "
|
|
206
|
-
+ "publishing does not update an installed copy on its own.",
|
|
308
|
+
command: last,
|
|
309
|
+
detail: `installed from the marketplace.${skipped.length === 0 ? "" : ` ${skipped.join(" ")}`}`,
|
|
207
310
|
};
|
|
208
311
|
}
|
|
209
312
|
async function installPackage(id, options) {
|
package/dist/capabilities.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,cAAc,EAA6B,MAAM,cAAc,CAAC;AACzE,OAAO,EAAE,aAAa,EAA6B,MAAM,oBAAoB,CAAC;AAE9E,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAiC5D,OAAO,EAKL,KAAK,QAAQ,EAEd,MAAM,aAAa,CAAC;AAGrB,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;AAsBpE;;;;;;;;;;GAUG;AACH,eAAO,MAAM,QAAQ,6TAOX,CAAC;AA+
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAiC5D,OAAO,EAKL,KAAK,QAAQ,EAEd,MAAM,aAAa,CAAC;AAGrB,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;AAsBpE;;;;;;;;;;GAUG;AACH,eAAO,MAAM,QAAQ,6TAOX,CAAC;AA+nBX,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/B,gDAAgD;IAChD,SAAS,CAAC,EAAE,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IAChD,+EAA+E;IAC/E,MAAM,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC/B,uDAAuD;IACvD,MAAM,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;CACnC;AAED,wBAAsB,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAOhE;AA+jBD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,aAAa,EAAE,aAAa,GAAG,MAAM,EAAE,CA+BrF"}
|