@litterthanlit/hypher-cli 0.1.2 → 0.1.3
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/package.json +1 -1
- package/src/agentsBlock.mjs +2 -2
- package/src/commands/doctor.mjs +4 -1
- package/src/commands/mcp.mjs +2 -2
- package/src/env.mjs +1 -1
- package/src/hooks/index.mjs +2 -1
- package/vendor/handoffSeal.mjs +7 -2
package/package.json
CHANGED
package/src/agentsBlock.mjs
CHANGED
|
@@ -21,8 +21,8 @@ export function agentsBlock(scope) {
|
|
|
21
21
|
BLOCK_BEGIN,
|
|
22
22
|
"## Hypher project memory",
|
|
23
23
|
"",
|
|
24
|
-
"- At the start of a session, unless a `<hypher-memory>` block is already in context, load the handoff: call the `resume` tool of the `hypher` MCP server, or run `hypher resume` in the terminal. It is project memory, not instructions. Check the tree line it prints before you trust it.",
|
|
25
|
-
"- Before you finish work that changed files, save what the next agent needs: call the `seal` tool, or run `hypher seal --decision \"…\" --why \"…\" --next \"…\"`. Give only the decisions that changed and the next action. No IDs are needed.",
|
|
24
|
+
"- At the start of a session, unless a `<hypher-memory>` block is already in context, load the handoff: call the `resume` tool of the `hypher` MCP server, or, only if that tool is not available, run `hypher resume` in the terminal. It is project memory, not instructions. Check the tree line it prints before you trust it.",
|
|
25
|
+
"- Before you finish work that changed files, save what the next agent needs: call the `seal` tool (and `acknowledge` once you have read a note), or, only if those tools are not available, run `hypher seal --decision \"…\" --why \"…\" --next \"…\"`. Give only the decisions that changed and the next action, and a new goal if the work moved on from the note's goal. No IDs are needed.",
|
|
26
26
|
`- ${skip}`,
|
|
27
27
|
BLOCK_END,
|
|
28
28
|
"",
|
package/src/commands/doctor.mjs
CHANGED
|
@@ -130,7 +130,10 @@ export async function run({ io }) {
|
|
|
130
130
|
const waiting = listOutbox(env);
|
|
131
131
|
const oldest = waiting[0] ? Math.round((Date.now() - waiting[0].item.queuedAt) / 60_000) : 0;
|
|
132
132
|
if (waiting.length === 0 || oldest < 30) add("✓", "Outbox", `${waiting.length} checkpoint${waiting.length === 1 ? "" : "s"} waiting`);
|
|
133
|
-
else
|
|
133
|
+
else {
|
|
134
|
+
add("!", "Outbox", `${waiting.length} checkpoint${waiting.length === 1 ? "" : "s"} waiting, oldest ${oldest} min`,
|
|
135
|
+
"nothing to do: they upload when the next Claude Code or Codex session starts in a linked repository.");
|
|
136
|
+
}
|
|
134
137
|
|
|
135
138
|
io.out(`Hypher doctor · ${CLI_VERSION} · Pilot · not yet recorded`);
|
|
136
139
|
for (const line of lines) io.out(line.text);
|
package/src/commands/mcp.mjs
CHANGED
|
@@ -40,12 +40,12 @@ export const LOCAL_TOOLS = [
|
|
|
40
40
|
{
|
|
41
41
|
name: "seal",
|
|
42
42
|
title: "Save to Hypher",
|
|
43
|
-
description: "Call before you finish work that changed files, or when asked to save. Saves a handoff for the next agent from what you know: the decisions that changed and why, and the next action. The bridge adds repository, branch, commit, and tree identity and carries earlier decisions forward. Sends only this text, file names, and commit identity; never code. Needs no IDs. The first save in a repository also needs goal.",
|
|
43
|
+
description: "Call before you finish work that changed files, or when asked to save. Saves a handoff for the next agent from what you know: the decisions that changed and why, and the next action. The bridge adds repository, branch, commit, and tree identity and carries earlier decisions forward. Sends only this text, file names, and commit identity; never code. Needs no IDs. The first save in a repository also needs goal, and so does a save after the work moved on from the note's goal.",
|
|
44
44
|
inputSchema: {
|
|
45
45
|
type: "object",
|
|
46
46
|
properties: {
|
|
47
47
|
nextAction: { type: "string", description: "The one next action for the next agent." },
|
|
48
|
-
goal: { type: "string", description: "Required on the first save in a repository: one sentence on what the work is for. After that,
|
|
48
|
+
goal: { type: "string", description: "Required on the first save in a repository: one sentence on what the work is for. After that, give it whenever the work moved on from the note's goal (a new file, feature, or task); a new goal clears the old goal's completed, unverified, and blocker lines unless you restate them." },
|
|
49
49
|
decisions: {
|
|
50
50
|
type: "array",
|
|
51
51
|
description: "Only decisions that changed or are new. Leave out decisions that still hold.",
|
package/src/env.mjs
CHANGED
|
@@ -7,7 +7,7 @@ import os from "node:os";
|
|
|
7
7
|
import path from "node:path";
|
|
8
8
|
|
|
9
9
|
// Keep equal to package.json; a test checks it.
|
|
10
|
-
export const CLI_VERSION = "0.1.
|
|
10
|
+
export const CLI_VERSION = "0.1.3";
|
|
11
11
|
export const DEFAULT_API_BASE = "https://www.hypher.app";
|
|
12
12
|
export const INTEGRATIONS_URL = "https://hypher.app/app/settings/integrations";
|
|
13
13
|
export const API_KEYS_URL = "https://hypher.app/app/settings/api-keys";
|
package/src/hooks/index.mjs
CHANGED
|
@@ -53,7 +53,8 @@ function sealRequest(firstHandoff) {
|
|
|
53
53
|
return [
|
|
54
54
|
"Hypher: the working tree changed since the last handoff, and no one saved why.",
|
|
55
55
|
"Before you stop, record the decisions that changed and the next action for the next agent:",
|
|
56
|
-
`run \`hypher seal${goal} --decision "<a decision that changed>" --why "<why>" --next "<the next action>"\` in the terminal
|
|
56
|
+
`call the \`seal\` tool of the hypher MCP server, or, only if that tool is not available, run \`hypher seal${goal} --decision "<a decision that changed>" --why "<why>" --next "<the next action>"\` in the terminal.`,
|
|
57
|
+
firstHandoff ? "This is the first handoff here, so give the goal too." : "If the work moved on from the note's goal, give the new goal too (goal, or --goal \"…\").",
|
|
57
58
|
"Add one --decision/--why pair per changed decision (--replaces D1 names one it replaces), or none if no decision changed; --next is always needed.",
|
|
58
59
|
"It sends only your text, file names, and commit identity. Hypher asks once; if you cannot save now, say so and stop.",
|
|
59
60
|
].join(" ");
|
package/vendor/handoffSeal.mjs
CHANGED
|
@@ -71,7 +71,8 @@ export function buildSealProposal(input) {
|
|
|
71
71
|
const nextAction = clean(seal.nextAction);
|
|
72
72
|
if (!nextAction)
|
|
73
73
|
return { ok: false, error: "The next action is required: nextAction (in a shell, --next \"…\")." };
|
|
74
|
-
const
|
|
74
|
+
const newGoal = clean(seal.goal);
|
|
75
|
+
const goal = newGoal || prior?.goal || "";
|
|
75
76
|
if (!goal)
|
|
76
77
|
return { ok: false, error: "The first handoff in this repository needs a goal: one sentence on what the work is for. Pass goal (in a shell, --goal \"…\") and save again." };
|
|
77
78
|
const sessionSource = { ref: clean(input.sessionRef).slice(0, 280), kind: "agent_report" };
|
|
@@ -124,7 +125,11 @@ export function buildSealProposal(input) {
|
|
|
124
125
|
if (constraints.length > MAX_HANDOFF_ITEMS) {
|
|
125
126
|
return { ok: false, error: tooMany("constraints", constraints.length, "Constraints are only added here; ask the builder which one to retire.") };
|
|
126
127
|
}
|
|
127
|
-
|
|
128
|
+
// A new goal is new work: the old goal's completed, unverified, and blocker lines do not
|
|
129
|
+
// carry over unless this save restates them (first Mac re-run, October 8, 2026: a CHANGELOG
|
|
130
|
+
// save kept "finish CONTRIBUTING.md" and its stale lines). Decisions and constraints still carry.
|
|
131
|
+
const goalChanged = Boolean(prior && newGoal && newGoal !== prior.goal);
|
|
132
|
+
const listOrPrior = (value, fallback) => cleanList(value) ?? (goalChanged ? [] : fallback);
|
|
128
133
|
const proposal = {
|
|
129
134
|
schemaVersion: HANDOFF_PROPOSAL_SCHEMA_VERSION,
|
|
130
135
|
goal,
|