@floh-solutions/pharos-cli 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +18 -7
- package/dist/cli.js.map +1 -1
- package/dist/commands/setup.d.ts +2 -0
- package/dist/commands/setup.d.ts.map +1 -1
- package/dist/commands/setup.js +46 -0
- package/dist/commands/setup.js.map +1 -1
- package/package.json +3 -2
- package/skill/SKILL.md +138 -0
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAQ1D,OAAO,EAKL,KAAK,QAAQ,EAEd,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAQ1D,OAAO,EAKL,KAAK,QAAQ,EAEd,MAAM,aAAa,CAAC;AA6GrB,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;CAChC;AAED,wBAAsB,GAAG,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAOhE"}
|
package/dist/cli.js
CHANGED
|
@@ -40,14 +40,20 @@ const USAGE = `pharos — Azure DevOps from a headless shell, for an agent.
|
|
|
40
40
|
|
|
41
41
|
START HERE
|
|
42
42
|
|
|
43
|
-
setup
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
43
|
+
setup Everything needed to start, in one command.
|
|
44
|
+
Asks for your organisation, project and token;
|
|
45
|
+
stores the token in your OS keychain rather
|
|
46
|
+
than a file; writes the shell profile that
|
|
47
|
+
SCRIPTED shells read, not just interactive
|
|
48
|
+
ones; installs a Claude skill at user scope so
|
|
49
|
+
every session knows this tool is here; then
|
|
50
|
+
proves it by reading the board and the wiki.
|
|
51
|
+
Those are separate Azure DevOps permissions,
|
|
52
|
+
and a token missing the wiki one works fine
|
|
53
|
+
until the first wiki write days later.
|
|
49
54
|
--print show the shell block and change nothing
|
|
50
55
|
--stdin read the token from a pipe, for scripted setup
|
|
56
|
+
--no-skill do not install the Claude skill
|
|
51
57
|
|
|
52
58
|
COMMANDS
|
|
53
59
|
|
|
@@ -128,7 +134,11 @@ async function dispatch(io, options) {
|
|
|
128
134
|
"no-related-titles": { type: "boolean" },
|
|
129
135
|
}
|
|
130
136
|
: command === "setup"
|
|
131
|
-
? {
|
|
137
|
+
? {
|
|
138
|
+
print: { type: "boolean" },
|
|
139
|
+
stdin: { type: "boolean" },
|
|
140
|
+
"no-skill": { type: "boolean" },
|
|
141
|
+
}
|
|
132
142
|
: CONTENT_OPTIONS;
|
|
133
143
|
const { values, positionals } = parse(options.argv, { ...GLOBAL_OPTIONS, ...extras });
|
|
134
144
|
if (values["version"] === true)
|
|
@@ -143,6 +153,7 @@ async function dispatch(io, options) {
|
|
|
143
153
|
project: asString(values["project"]),
|
|
144
154
|
print: values["print"] === true,
|
|
145
155
|
stdin: values["stdin"] === true,
|
|
156
|
+
skill: values["no-skill"] !== true,
|
|
146
157
|
}, options.readStdin ?? readAllStdin, options.client);
|
|
147
158
|
}
|
|
148
159
|
const session = new Session({
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAwB,MAAM,WAAW,CAAC;AAG5D,OAAO,EAAE,GAAG,IAAI,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEtE,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAC7C,OAAO,EACL,OAAO,EACP,QAAQ,EACR,WAAW,EACX,UAAU,GAGX,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAIvC;;;;;;GAMG;AACH,MAAM,cAAc,GAAkB;IACpC,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;IAC3B,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;IACzB,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE;IACpC,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;IAC9B,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;IAChC,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;IACvB,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC3B,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;IACxB,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE;IACrC,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;CAC7B,CAAC;AAEF,gEAAgE;AAChE,MAAM,eAAe,GAAkB;IACrC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;IACxB,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;IACxB,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;CAC3B,CAAC;AAEF,MAAM,KAAK,GAAG
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/setup.d.ts
CHANGED
|
@@ -7,6 +7,8 @@ export interface SetupOptions {
|
|
|
7
7
|
print: boolean;
|
|
8
8
|
/** Read the token from stdin instead of prompting — for scripted setup. */
|
|
9
9
|
stdin: boolean;
|
|
10
|
+
/** Install the Claude skill. Default true; `--no-skill` opts out. */
|
|
11
|
+
skill: boolean;
|
|
10
12
|
}
|
|
11
13
|
export declare function runSetup(io: Io, env: NodeJS.ProcessEnv, options: SetupOptions, readStdin: () => Promise<string>,
|
|
12
14
|
/** Injected so the verification can be driven against a mock transport. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAW,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EAA8B,KAAK,QAAQ,EAAE,KAAK,EAAE,EAAE,MAAM,cAAc,CAAC;AA4ClF,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,2FAA2F;IAC3F,KAAK,EAAE,OAAO,CAAC;IACf,2EAA2E;IAC3E,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,QAAQ,CAC5B,EAAE,EAAE,EAAE,EACN,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC;AAChC,2EAA2E;AAC3E,UAAU,CAAC,EAAE,SAAS,GACrB,OAAO,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,SAAS,EAAW,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EAA8B,KAAK,QAAQ,EAAE,KAAK,EAAE,EAAE,MAAM,cAAc,CAAC;AA4ClF,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,2FAA2F;IAC3F,KAAK,EAAE,OAAO,CAAC;IACf,2EAA2E;IAC3E,KAAK,EAAE,OAAO,CAAC;IACf,qEAAqE;IACrE,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,QAAQ,CAC5B,EAAE,EAAE,EAAE,EACN,GAAG,EAAE,MAAM,CAAC,UAAU,EACtB,OAAO,EAAE,YAAY,EACrB,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC;AAChC,2EAA2E;AAC3E,UAAU,CAAC,EAAE,SAAS,GACrB,OAAO,CAAC,QAAQ,CAAC,CAqDnB"}
|
package/dist/commands/setup.js
CHANGED
|
@@ -72,6 +72,7 @@ verifyWith) {
|
|
|
72
72
|
// secret which is not there yet is worse than no profile change at all.
|
|
73
73
|
await storeSecret(token, target.secret);
|
|
74
74
|
const wrote = await updateProfile(target.profile, shellBlock(org, project, target.secret));
|
|
75
|
+
const skill = options.skill ? await installSkill(env) : "skipped";
|
|
75
76
|
// Prove it, rather than declaring success and letting them find out later.
|
|
76
77
|
const checks = await verify(org, project, token, verifyWith);
|
|
77
78
|
return emit(io, {
|
|
@@ -81,6 +82,7 @@ verifyWith) {
|
|
|
81
82
|
tokenStoredIn: describeSecret(target.secret),
|
|
82
83
|
profile: target.profile,
|
|
83
84
|
profileAction: wrote,
|
|
85
|
+
skill,
|
|
84
86
|
checks,
|
|
85
87
|
// The variables are exported by a file that this shell already read, so
|
|
86
88
|
// they are not in it. Saying so beats somebody concluding it failed.
|
|
@@ -148,6 +150,50 @@ function shellBlock(org, project, secret) {
|
|
|
148
150
|
END,
|
|
149
151
|
].join("\n");
|
|
150
152
|
}
|
|
153
|
+
// MARK: - The skill
|
|
154
|
+
/**
|
|
155
|
+
* Install the Claude skill to **user scope**.
|
|
156
|
+
*
|
|
157
|
+
* ## Why this ships with the tool instead of living in the repo
|
|
158
|
+
*
|
|
159
|
+
* Because the knowledge has to be somewhere the reader can actually reach, and
|
|
160
|
+
* a repo is not that place for anybody but its owner. Documentation in
|
|
161
|
+
* `AGENTS.md` or a `docs/` folder is invisible to a teammate working in their
|
|
162
|
+
* own checkout, and a setup guide is read once at install time and never again.
|
|
163
|
+
* Neither survives into the session three weeks later where the decision
|
|
164
|
+
* actually gets made.
|
|
165
|
+
*
|
|
166
|
+
* A user-scope skill does: it loads in every session, in any directory, on that
|
|
167
|
+
* person's machine. So it travels with the npm package and gets installed by
|
|
168
|
+
* the same command that configures the token — one step, not a thing to
|
|
169
|
+
* remember.
|
|
170
|
+
*
|
|
171
|
+
* **What is in it is deliberately NOT the API traps.** Those are handled inside
|
|
172
|
+
* this package and a caller cannot reach them; a second copy in prose would
|
|
173
|
+
* only be a copy that can drift. What it carries is the part no code can: which
|
|
174
|
+
* tool to reach for, what the exit codes oblige you to do, and the handful of
|
|
175
|
+
* Azure DevOps facts that are architectural rather than fixable — a wiki is a
|
|
176
|
+
* git repository, there is no wiki event, ancestors are not created for you.
|
|
177
|
+
*
|
|
178
|
+
* Overwritten on every run so an upgrade refreshes it. Failure is reported and
|
|
179
|
+
* never fatal: not having the skill is a worse experience, not a broken setup.
|
|
180
|
+
*/
|
|
181
|
+
async function installSkill(env) {
|
|
182
|
+
const home = env["HOME"] ?? homedir();
|
|
183
|
+
const destination = join(home, ".claude", "skills", "pharos", "SKILL.md");
|
|
184
|
+
try {
|
|
185
|
+
// Resolved relative to the compiled file, so it works from dist/ in a
|
|
186
|
+
// global npm install as well as from src/ in this checkout.
|
|
187
|
+
const source = new URL("../../skill/SKILL.md", import.meta.url);
|
|
188
|
+
const body = await readFile(source, "utf8");
|
|
189
|
+
await mkdir(dirname(destination), { recursive: true });
|
|
190
|
+
await writeFile(destination, body, "utf8");
|
|
191
|
+
return destination;
|
|
192
|
+
}
|
|
193
|
+
catch (error) {
|
|
194
|
+
return `not installed (${messageOf(error)})`;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
151
197
|
// MARK: - Doing it
|
|
152
198
|
async function storeSecret(token, secret) {
|
|
153
199
|
if (secret.kind === "keychain") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAA0B,MAAM,cAAc,CAAC;AAElF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,MAAM,KAAK,GAAG,sBAAsB,CAAC;AACrC,MAAM,GAAG,GAAG,sBAAsB,CAAC;AACnC,mGAAmG;AACnG,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@floh-solutions/pharos-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Azure DevOps from a headless shell, for an agent: the whole context of a task in one call, and the wiki/comment verbs Microsoft's MCP server does not ship.",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"author": "FLOH Solutions",
|
|
@@ -17,7 +17,8 @@
|
|
|
17
17
|
"pharos": "./dist/bin.js"
|
|
18
18
|
},
|
|
19
19
|
"files": [
|
|
20
|
-
"dist"
|
|
20
|
+
"dist",
|
|
21
|
+
"skill"
|
|
21
22
|
],
|
|
22
23
|
"engines": {
|
|
23
24
|
"node": ">=22"
|
package/skill/SKILL.md
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pharos
|
|
3
|
+
description: "Use whenever Azure DevOps work is involved — reading or updating a work item, task, bug, story or epic; anything with a board, backlog, sprint or iteration; reading or writing a project wiki page; commenting on a task or a wiki page; linking a plan to an epic; or when the user names a work item by number (\"pick up 4821\", \"what's on 210\"). Also use when deciding between the Azure DevOps MCP server and the `pharos` CLI, or when an Azure DevOps call fails and you need to know whether to retry it."
|
|
4
|
+
license: Proprietary
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Working Azure DevOps with `pharos`
|
|
8
|
+
|
|
9
|
+
`pharos` is a CLI that gives you the full Azure DevOps surface from a shell,
|
|
10
|
+
authenticated by an environment variable rather than a browser login. Run
|
|
11
|
+
`pharos --help` for the complete verb list; this skill is the part that is not
|
|
12
|
+
in the help text.
|
|
13
|
+
|
|
14
|
+
## Start every task with one command
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
pharos task <id>
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
That returns the work item, its comments, its attachments, its relations **with
|
|
21
|
+
their titles**, and the full content of every linked wiki page **plus the
|
|
22
|
+
discussion on those pages** — in one call.
|
|
23
|
+
|
|
24
|
+
**Do this before anything else, and do not assemble it yourself.** By hand it is
|
|
25
|
+
five or six lookups across two tools, and the plan a colleague wrote is usually
|
|
26
|
+
on a linked wiki page rather than in the description. A task worked without it
|
|
27
|
+
is a task worked without the plan.
|
|
28
|
+
|
|
29
|
+
Add `--pretty` when a person will read the output.
|
|
30
|
+
|
|
31
|
+
Anything that could not be fetched appears in `problems[]`. **If that array is
|
|
32
|
+
not empty, say so before acting** — a context with an invisible hole in it gets
|
|
33
|
+
reasoned from confidently.
|
|
34
|
+
|
|
35
|
+
## Which tool: `pharos` or the Azure DevOps MCP server
|
|
36
|
+
|
|
37
|
+
If both are available, they overlap. The dividing line:
|
|
38
|
+
|
|
39
|
+
| | |
|
|
40
|
+
|---|---|
|
|
41
|
+
| **Use `pharos`** | anything touching a **wiki page's comments** (the MCP has no tool for these at all), deleting a comment, reactions, deleting a wiki page, and `pharos task <id>` for gathering context |
|
|
42
|
+
| **Either works** | reading and querying work items, creating them, updating fields and state, adding a comment, reading a wiki page |
|
|
43
|
+
| **The MCP may be better** | code search, repository and pull request work, anything outside work items and wikis |
|
|
44
|
+
|
|
45
|
+
When in doubt use `pharos`: its failure modes are structured and its guards are
|
|
46
|
+
explicit.
|
|
47
|
+
|
|
48
|
+
## Reading the outcome
|
|
49
|
+
|
|
50
|
+
Output is a contract. **Success is JSON on stdout; failure is JSON on stderr
|
|
51
|
+
with a non-zero exit.** An empty array with exit 0 is a query that matched
|
|
52
|
+
nothing — a different fact from a failure.
|
|
53
|
+
|
|
54
|
+
| exit | meaning | what to do |
|
|
55
|
+
|---|---|---|
|
|
56
|
+
| `0` | it worked | carry on |
|
|
57
|
+
| `1` | the call failed | check `kind`; retry only if it is `rateLimit` (wait `retryAfterMs`) or transient |
|
|
58
|
+
| `2` | called wrong, or not configured | **never retry unchanged.** Fix the call, or the setup |
|
|
59
|
+
| `3` | a guard here refused | re-run with `--yes`, or raise `--max-writes` — after deciding it is right |
|
|
60
|
+
|
|
61
|
+
`"kind": "conflict"` means somebody wrote first. Your work is still valid:
|
|
62
|
+
re-read, re-apply. It carries both revisions — and note that **posting a comment
|
|
63
|
+
bumps `System.Rev`**, so a revision mismatch is not proof anybody edited the
|
|
64
|
+
same field.
|
|
65
|
+
|
|
66
|
+
## Destructive verbs refuse by default. Read the refusal.
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
pharos wiki delete /Plans/Old # exit 3, nothing changed
|
|
70
|
+
pharos wiki delete /Plans/Old --yes # done
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**Exit 3 with `"kind": "refused"` means nothing happened.** Do not report the
|
|
74
|
+
work as done. The refusal carries a preview of what it would have done — check
|
|
75
|
+
that preview is what you intended before adding `--yes`, rather than reflexively
|
|
76
|
+
re-running with the flag.
|
|
77
|
+
|
|
78
|
+
Replacing a wiki page needs `--yes`; creating one does not. The refusal tells
|
|
79
|
+
you how many bytes are at stake, which is how you notice you are about to
|
|
80
|
+
overwrite somebody's page instead of writing a new one.
|
|
81
|
+
|
|
82
|
+
`--dry-run` gives the preview with exit 0 when you want to look without being
|
|
83
|
+
refused.
|
|
84
|
+
|
|
85
|
+
## The traps are handled. Do not work around them.
|
|
86
|
+
|
|
87
|
+
Every known Azure DevOps failure of this kind is handled inside the tool: the
|
|
88
|
+
lost-update on wiki writes, the deleted-comment field that lies, the reaction
|
|
89
|
+
call that needs an empty body, artifact links that must carry a project GUID,
|
|
90
|
+
relation removal that would otherwise take the wrong link.
|
|
91
|
+
|
|
92
|
+
**So if something looks like it needs a workaround, it does not.** A `pharos`
|
|
93
|
+
command failing means the request was genuinely wrong or the API genuinely
|
|
94
|
+
refused — read the error rather than reaching for `curl`. If you find a real gap,
|
|
95
|
+
say so plainly; do not paper over it with raw REST calls that skip the guards.
|
|
96
|
+
|
|
97
|
+
## Three things no tool can fix
|
|
98
|
+
|
|
99
|
+
1. **A wiki is a git repository.** Two writes to the same wiki at the same
|
|
100
|
+
moment are two pushes racing for one HEAD. Write pages one at a time.
|
|
101
|
+
2. **There is no wiki event in service hooks.** You cannot subscribe to "a wiki
|
|
102
|
+
page changed" — only to `git.push` on the wiki's repository. If you need to
|
|
103
|
+
react to wiki edits, that is the only route.
|
|
104
|
+
3. **Wiki ancestors are not created for you.** Writing `/A/B` when `/A` does not
|
|
105
|
+
exist is refused. Build a page tree top-down, one write per level.
|
|
106
|
+
|
|
107
|
+
## The loop
|
|
108
|
+
|
|
109
|
+
Working a task end to end, in the order that keeps the board honest:
|
|
110
|
+
|
|
111
|
+
1. `pharos task <id>` — read everything, including the linked plan.
|
|
112
|
+
2. If a plan is needed, write it: `pharos wiki write /Plans/<name> --stdin`,
|
|
113
|
+
then link it to the epic so the next person finds it the same way you did.
|
|
114
|
+
3. Break it down — create the child items.
|
|
115
|
+
4. `pharos comment add <id> --file notes.md` — decisions belong on the item,
|
|
116
|
+
not only in a chat log that nobody else can read.
|
|
117
|
+
5. Move the state when the work moves, not at the end.
|
|
118
|
+
|
|
119
|
+
**Every person uses their own token.** Board attribution is per-person, so
|
|
120
|
+
anything you do is recorded against whoever owns `ADO_PAT`. Never suggest
|
|
121
|
+
sharing one.
|
|
122
|
+
|
|
123
|
+
## When it is not set up
|
|
124
|
+
|
|
125
|
+
`"kind": "config"` on exit 2 means the environment is missing. Run:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
pharos setup
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
It asks for the organisation, project and token, stores the token in the OS
|
|
132
|
+
keychain rather than a file, writes the right shell profile, and verifies both
|
|
133
|
+
permission scopes — Work Items and Wiki are separate in Azure DevOps, and a
|
|
134
|
+
token missing the second one works until the first wiki write.
|
|
135
|
+
|
|
136
|
+
Variables live in the environment (`ADO_ORG`, `ADO_PROJECT`, `ADO_PAT`) and
|
|
137
|
+
**never in the tool's own config**, which is what lets the same command run in
|
|
138
|
+
CI and unattended. After setup, a **new** shell is needed.
|