@poncho-ai/harness 0.24.0 → 0.25.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.
@@ -1,5 +1,5 @@
1
1
 
2
- > @poncho-ai/harness@0.24.0 build /home/runner/work/poncho-ai/poncho-ai/packages/harness
2
+ > @poncho-ai/harness@0.25.0 build /Users/cesar/Dev/latitude/poncho-ai/packages/harness
3
3
  > node scripts/embed-docs.js && tsup src/index.ts --format esm --dts
4
4
 
5
5
  [embed-docs] Generated poncho-docs.ts with 4 topics
@@ -8,8 +8,8 @@
8
8
  CLI tsup v8.5.1
9
9
  CLI Target: es2022
10
10
  ESM Build start
11
- ESM dist/index.js 263.89 KB
12
- ESM ⚡️ Build success in 136ms
11
+ ESM dist/index.js 268.11 KB
12
+ ESM ⚡️ Build success in 638ms
13
13
  DTS Build start
14
- DTS ⚡️ Build success in 6918ms
15
- DTS dist/index.d.ts 27.50 KB
14
+ DTS ⚡️ Build success in 9953ms
15
+ DTS dist/index.d.ts 28.15 KB
@@ -0,0 +1,6 @@
1
+
2
+ > @poncho-ai/harness@0.11.2 lint /Users/cesar/Dev/latitude/poncho-ai/packages/harness
3
+ > eslint src/
4
+
5
+ sh: eslint: command not found
6
+  ELIFECYCLE  Command failed.
@@ -0,0 +1,135 @@
1
+
2
+ > @poncho-ai/harness@0.16.1 test /Users/cesar/Dev/latitude/poncho-ai/packages/harness
3
+ > vitest
4
+
5
+
6
+  RUN  v1.6.1 /Users/cesar/Dev/latitude/poncho-ai/packages/harness
7
+
8
+ ✓ test/telemetry.test.ts  (3 tests) 2ms
9
+ [event] step:completed {"type":"step:completed","step":1,"duration":1}
10
+ [event] step:started {"type":"step:started","step":2}
11
+ ✓ test/schema-converter.test.ts  (27 tests) 19ms
12
+ stdout | test/mcp.test.ts > mcp bridge protocol transports > discovers and calls tools over streamable HTTP
13
+ [poncho][mcp] {"event":"catalog.loaded","server":"remote","discoveredCount":1}
14
+ [poncho][mcp] {"event":"tools.selected","requestedPatternCount":1,"registeredCount":1,"filteredByPolicyCount":0,"filteredByIntentCount":0}
15
+
16
+ stdout | test/mcp.test.ts > mcp bridge protocol transports > selects discovered tools by requested patterns
17
+ [poncho][mcp] {"event":"catalog.loaded","server":"remote","discoveredCount":2}
18
+ [poncho][mcp] {"event":"tools.selected","requestedPatternCount":1,"registeredCount":1,"filteredByPolicyCount":0,"filteredByIntentCount":1}
19
+ [poncho][mcp] {"event":"tools.selected","requestedPatternCount":1,"registeredCount":2,"filteredByPolicyCount":0,"filteredByIntentCount":0}
20
+
21
+ ✓ test/agent-parser.test.ts  (10 tests) 24ms
22
+ stdout | test/mcp.test.ts > mcp bridge protocol transports > skips discovery when bearer token env value is missing
23
+ [poncho][mcp] {"event":"tools.selected","requestedPatternCount":1,"registeredCount":0,"filteredByPolicyCount":0,"filteredByIntentCount":0}
24
+
25
+ stderr | test/mcp.test.ts > mcp bridge protocol transports > skips discovery when bearer token env value is missing
26
+ [poncho][mcp] {"event":"auth.token_missing","server":"remote","tokenEnv":"MISSING_TOKEN_ENV"}
27
+
28
+ stdout | test/mcp.test.ts > mcp bridge protocol transports > returns actionable errors for 403 permission failures
29
+ [poncho][mcp] {"event":"catalog.loaded","server":"remote","discoveredCount":1}
30
+ [poncho][mcp] {"event":"tools.selected","requestedPatternCount":1,"registeredCount":1,"filteredByPolicyCount":0,"filteredByIntentCount":0}
31
+
32
+ ✓ test/mcp.test.ts  (6 tests) 81ms
33
+ ✓ test/memory.test.ts  (4 tests) 56ms
34
+ ✓ test/state.test.ts  (5 tests) 237ms
35
+ ✓ test/model-factory.test.ts  (4 tests) 2ms
36
+ ✓ test/agent-identity.test.ts  (2 tests) 43ms
37
+ stdout | test/harness.test.ts > agent harness > registers default filesystem tools
38
+ [poncho][mcp] {"event":"tools.cleared","reason":"initialize","requestedPatterns":[]}
39
+
40
+ stdout | test/harness.test.ts > agent harness > disables write_file by default in production environment
41
+ [poncho][mcp] {"event":"tools.cleared","reason":"initialize","requestedPatterns":[]}
42
+
43
+ stdout | test/harness.test.ts > agent harness > allows disabling built-in tools via poncho.config.js
44
+ [poncho][mcp] {"event":"tools.cleared","reason":"initialize","requestedPatterns":[]}
45
+
46
+ stdout | test/harness.test.ts > agent harness > supports per-environment tool overrides
47
+ [poncho][mcp] {"event":"tools.cleared","reason":"initialize","requestedPatterns":[]}
48
+
49
+ stdout | test/harness.test.ts > agent harness > supports per-environment tool overrides
50
+ [poncho][mcp] {"event":"tools.cleared","reason":"initialize","requestedPatterns":[]}
51
+
52
+ stdout | test/harness.test.ts > agent harness > does not auto-register exported tool objects from skill scripts
53
+ [poncho][mcp] {"event":"tools.cleared","reason":"initialize","requestedPatterns":[]}
54
+
55
+ stdout | test/harness.test.ts > agent harness > refreshes skill metadata and tools in development mode
56
+ [poncho][mcp] {"event":"tools.cleared","reason":"initialize","requestedPatterns":[]}
57
+
58
+ stdout | test/harness.test.ts > agent harness > refreshes skill metadata and tools in development mode
59
+ [poncho][mcp] {"event":"tools.cleared","reason":"skills:changed","requestedPatterns":[]}
60
+ [poncho][mcp] {"event":"tools.cleared","reason":"activate:beta","requestedPatterns":[]}
61
+
62
+ stdout | test/harness.test.ts > agent harness > prunes removed active skills after refresh in development mode
63
+ [poncho][mcp] {"event":"tools.cleared","reason":"initialize","requestedPatterns":[]}
64
+ [poncho][mcp] {"event":"tools.cleared","reason":"activate:obsolete","requestedPatterns":[]}
65
+
66
+ stdout | test/harness.test.ts > agent harness > prunes removed active skills after refresh in development mode
67
+ [poncho][mcp] {"event":"tools.cleared","reason":"skills:changed","requestedPatterns":[]}
68
+
69
+ stdout | test/harness.test.ts > agent harness > does not refresh skills outside development mode
70
+ [poncho][mcp] {"event":"tools.cleared","reason":"initialize","requestedPatterns":[]}
71
+
72
+ stdout | test/harness.test.ts > agent harness > clears active skills when skill metadata changes in development mode
73
+ [poncho][mcp] {"event":"tools.cleared","reason":"initialize","requestedPatterns":[]}
74
+ [poncho][mcp] {"event":"tools.cleared","reason":"activate:alpha","requestedPatterns":[]}
75
+
76
+ stdout | test/harness.test.ts > agent harness > clears active skills when skill metadata changes in development mode
77
+ [poncho][mcp] {"event":"tools.cleared","reason":"skills:changed","requestedPatterns":[]}
78
+
79
+ stdout | test/harness.test.ts > agent harness > lists skill scripts through list_skill_scripts
80
+ [poncho][mcp] {"event":"tools.cleared","reason":"initialize","requestedPatterns":[]}
81
+
82
+ stdout | test/harness.test.ts > agent harness > runs JavaScript/TypeScript skill scripts through run_skill_script
83
+ [poncho][mcp] {"event":"tools.cleared","reason":"initialize","requestedPatterns":[]}
84
+
85
+ stdout | test/harness.test.ts > agent harness > runs AGENT-scope scripts from root scripts directory
86
+ [poncho][mcp] {"event":"tools.cleared","reason":"initialize","requestedPatterns":[]}
87
+
88
+ stdout | test/harness.test.ts > agent harness > blocks path traversal in run_skill_script
89
+ [poncho][mcp] {"event":"tools.cleared","reason":"initialize","requestedPatterns":[]}
90
+
91
+ stdout | test/harness.test.ts > agent harness > requires allowed-tools entries for non-standard script directories
92
+ [poncho][mcp] {"event":"tools.cleared","reason":"initialize","requestedPatterns":[]}
93
+
94
+ stdout | test/harness.test.ts > agent harness > registers MCP tools dynamically for stacked active skills and supports deactivation
95
+ [poncho][mcp] {"event":"catalog.loaded","server":"remote","discoveredCount":2}
96
+ [poncho][mcp] {"event":"tools.cleared","reason":"initialize","requestedPatterns":[]}
97
+ [poncho][mcp] {"event":"tools.selected","requestedPatternCount":1,"registeredCount":1,"filteredByPolicyCount":0,"filteredByIntentCount":1}
98
+ [poncho][mcp] {"event":"tools.refreshed","reason":"activate:skill-a","requestedPatterns":["remote/a"],"registeredCount":1,"activeSkills":["skill-a"]}
99
+ [poncho][mcp] {"event":"tools.selected","requestedPatternCount":2,"registeredCount":2,"filteredByPolicyCount":0,"filteredByIntentCount":0}
100
+ [poncho][mcp] {"event":"tools.refreshed","reason":"activate:skill-b","requestedPatterns":["remote/a","remote/b"],"registeredCount":2,"activeSkills":["skill-a","skill-b"]}
101
+ [poncho][mcp] {"event":"tools.selected","requestedPatternCount":1,"registeredCount":1,"filteredByPolicyCount":0,"filteredByIntentCount":1}
102
+ [poncho][mcp] {"event":"tools.refreshed","reason":"deactivate:skill-a","requestedPatterns":["remote/b"],"registeredCount":1,"activeSkills":["skill-b"]}
103
+
104
+ stdout | test/harness.test.ts > agent harness > supports flat tool access config format
105
+ [poncho][mcp] {"event":"tools.cleared","reason":"initialize","requestedPatterns":[]}
106
+
107
+ stdout | test/harness.test.ts > agent harness > flat tool access takes priority over legacy defaults
108
+ [poncho][mcp] {"event":"tools.cleared","reason":"initialize","requestedPatterns":[]}
109
+
110
+ stdout | test/harness.test.ts > agent harness > byEnvironment overrides flat tool access
111
+ [poncho][mcp] {"event":"tools.cleared","reason":"initialize","requestedPatterns":[]}
112
+
113
+ stdout | test/harness.test.ts > agent harness > registerTools skips tools disabled via config
114
+ [poncho][mcp] {"event":"tools.cleared","reason":"initialize","requestedPatterns":[]}
115
+
116
+ stdout | test/harness.test.ts > agent harness > approval access level registers the tool but marks it for approval
117
+ [poncho][mcp] {"event":"tools.cleared","reason":"initialize","requestedPatterns":[]}
118
+
119
+ stdout | test/harness.test.ts > agent harness > tools without approval config do not require approval
120
+ [poncho][mcp] {"event":"tools.cleared","reason":"initialize","requestedPatterns":[]}
121
+
122
+ stdout | test/harness.test.ts > agent harness > allows in-flight MCP calls to finish after skill deactivation
123
+ [poncho][mcp] {"event":"catalog.loaded","server":"remote","discoveredCount":1}
124
+ [poncho][mcp] {"event":"tools.cleared","reason":"initialize","requestedPatterns":[]}
125
+ [poncho][mcp] {"event":"tools.selected","requestedPatternCount":1,"registeredCount":1,"filteredByPolicyCount":0,"filteredByIntentCount":0}
126
+ [poncho][mcp] {"event":"tools.refreshed","reason":"activate:skill-slow","requestedPatterns":["remote/slow"],"registeredCount":1,"activeSkills":["skill-slow"]}
127
+ [poncho][mcp] {"event":"tools.cleared","reason":"deactivate:skill-slow","requestedPatterns":[]}
128
+
129
+ ✓ test/harness.test.ts  (25 tests) 291ms
130
+
131
+  Test Files  9 passed (9)
132
+  Tests  86 passed (86)
133
+  Start at  17:47:43
134
+  Duration  1.88s (transform 684ms, setup 1ms, collect 2.34s, tests 755ms, environment 2ms, prepare 1.27s)
135
+
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @poncho-ai/harness
2
2
 
3
+ ## 0.25.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`5a103ca`](https://github.com/cesr/poncho-ai/commit/5a103ca62238cceaa4f4b31769a96637330d6b84) Thanks [@cesr](https://github.com/cesr)! - Split `memory_main_update` into `memory_main_write` (full overwrite) and `memory_main_edit` (targeted string replacement). Hot-reload AGENT.md and skills in dev mode without restarting the server. Merge agent + skill MCP tool patterns additively. Fix MissingToolResultsError when resuming from nested approval checkpoints.
8
+
3
9
  ## 0.24.0
4
10
 
5
11
  ### Minor Changes
package/dist/index.d.ts CHANGED
@@ -247,7 +247,6 @@ interface MemoryStore {
247
247
  getMainMemory(): Promise<MainMemory>;
248
248
  updateMainMemory(input: {
249
249
  content: string;
250
- mode?: "replace" | "append";
251
250
  }): Promise<MainMemory>;
252
251
  }
253
252
  declare const createMemoryStore: (agentId: string, config?: MemoryConfig, options?: {
@@ -583,6 +582,7 @@ declare class AgentHarness {
583
582
  private _browserSession?;
584
583
  private _browserMod?;
585
584
  private parsedAgent?;
585
+ private agentFileFingerprint;
586
586
  private mcpBridge?;
587
587
  private subagentManager?;
588
588
  private resolveToolAccess;
@@ -616,6 +616,22 @@ declare class AgentHarness {
616
616
  private buildSkillFingerprint;
617
617
  private registerSkillTools;
618
618
  private static readonly SKILL_REFRESH_DEBOUNCE_MS;
619
+ /**
620
+ * Re-read AGENT.md and update the parsed agent when the file has changed
621
+ * on disk. Returns `true` when the agent was actually re-parsed.
622
+ *
623
+ * Preserves the agent identity (id) across reloads so conversation
624
+ * continuity isn't broken.
625
+ */
626
+ private refreshAgentIfChanged;
627
+ /**
628
+ * Re-scan skill directories and update metadata, tools, and context window
629
+ * when skills have changed on disk. Returns `true` when the skill set was
630
+ * actually updated.
631
+ *
632
+ * @param force - bypass the time-based debounce (used for mid-run refreshes
633
+ * after the agent may have written new skill files).
634
+ */
619
635
  private refreshSkillsIfChanged;
620
636
  initialize(): Promise<void>;
621
637
  private buildBrowserStoragePersistence;