@first-to-fly/orchestrator-mcp 0.7.0 → 0.7.1

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.
@@ -1,14 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * Claude Code Stop hook — enforces session summary before exit.
3
+ * Claude Code Stop hook — soft reminder to save session summary.
4
4
  *
5
5
  * Parses the transcript to check if save_session_summary was called.
6
- * If not, blocks exit (exit 2) with a reminder message.
7
- *
8
- * Guards:
9
- * - stop_hook_active → exit 0 (prevents infinite loop)
10
- * - 5-second timeout → exit 0 (fail open)
11
- * - Any uncaught error → exit 0 (fail open)
6
+ * If not, outputs a non-blocking reminder as additionalContext.
7
+ * Never blocks exit (always exit 0).
12
8
  */
13
9
  export {};
14
10
  //# sourceMappingURL=stop.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../src/hooks/stop.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;GAUG"}
1
+ {"version":3,"file":"stop.d.ts","sourceRoot":"","sources":["../../src/hooks/stop.ts"],"names":[],"mappings":";AAEA;;;;;;GAMG"}
@@ -1,15 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
3
  /**
4
- * Claude Code Stop hook — enforces session summary before exit.
4
+ * Claude Code Stop hook — soft reminder to save session summary.
5
5
  *
6
6
  * Parses the transcript to check if save_session_summary was called.
7
- * If not, blocks exit (exit 2) with a reminder message.
8
- *
9
- * Guards:
10
- * - stop_hook_active → exit 0 (prevents infinite loop)
11
- * - 5-second timeout → exit 0 (fail open)
12
- * - Any uncaught error → exit 0 (fail open)
7
+ * If not, outputs a non-blocking reminder as additionalContext.
8
+ * Never blocks exit (always exit 0).
13
9
  */
14
10
  var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
15
11
  if (k2 === undefined) k2 = k;
@@ -54,21 +50,22 @@ async function main() {
54
50
  const input = await (0, utils_1.readStdin)();
55
51
  if (!input)
56
52
  return;
57
- // Infinite-loop guard: if we're already in a stop hook, allow exit
58
- if (input.stop_hook_active)
59
- return;
60
53
  const transcriptPath = input.transcript_path;
61
54
  if (!transcriptPath || typeof transcriptPath !== "string")
62
55
  return;
63
- // Check transcript exists
64
56
  if (!fs.existsSync(transcriptPath))
65
57
  return;
66
58
  const found = await scanTranscript(transcriptPath);
67
59
  if (found)
68
60
  return;
69
- // Block exitagent hasn't saved session summary
70
- process.stderr.write("Session has unsaved work. Call save_session_summary with a summary of what was accomplished, or say \"no meaningful work\" to skip.\n");
71
- process.exit(2);
61
+ // Soft reminderdon't block exit
62
+ const output = {
63
+ hookSpecificOutput: {
64
+ hookEventName: "Stop",
65
+ additionalContext: "[Orchestrator] Session summary not saved. Consider calling save_session_summary if meaningful work was done.",
66
+ },
67
+ };
68
+ console.log(JSON.stringify(output));
72
69
  }
73
70
  async function scanTranscript(filePath) {
74
71
  return new Promise((resolve) => {
@@ -78,7 +75,6 @@ async function scanTranscript(filePath) {
78
75
  rl.on("line", (line) => {
79
76
  if (found)
80
77
  return;
81
- // Each line is a JSON object — look for tool_use with save_session_summary
82
78
  if (line.includes(TOOL_NAME)) {
83
79
  try {
84
80
  const entry = JSON.parse(line);
@@ -101,17 +97,14 @@ async function scanTranscript(filePath) {
101
97
  function hasSaveSessionSummary(entry) {
102
98
  if (!entry || typeof entry !== "object")
103
99
  return false;
104
- // Check direct tool_use block
105
100
  if (entry.type === "tool_use" && entry.name === TOOL_NAME)
106
101
  return true;
107
- // Check nested content array (assistant messages)
108
102
  if (Array.isArray(entry.content)) {
109
103
  for (const block of entry.content) {
110
104
  if (block.type === "tool_use" && block.name === TOOL_NAME)
111
105
  return true;
112
106
  }
113
107
  }
114
- // Check message wrapper
115
108
  if (entry.message?.content && Array.isArray(entry.message.content)) {
116
109
  for (const block of entry.message.content) {
117
110
  if (block.type === "tool_use" && block.name === TOOL_NAME)
@@ -125,5 +118,6 @@ main()
125
118
  .catch(() => { })
126
119
  .finally(() => {
127
120
  clearTimeout(timer);
121
+ process.exit(0);
128
122
  });
129
123
  //# sourceMappingURL=stop.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/hooks/stop.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stop.js","sourceRoot":"","sources":["../../src/hooks/stop.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@first-to-fly/orchestrator-mcp",
3
- "version": "0.7.0",
3
+ "version": "0.7.1",
4
4
  "description": "MCP server for FirstToFly Orchestrator - persistent memory for Claude Code",
5
5
  "main": "dist/index.js",
6
6
  "bin": {