@spences10/pi-harness 0.0.4 → 0.0.5
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 +24 -5
- package/dist/enforcement/policy.js +7 -6
- package/dist/enforcement/policy.js.map +1 -1
- package/dist/extension.js +19 -3
- package/dist/extension.js.map +1 -1
- package/dist/index.d.ts +19 -3
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/prompt.d.ts +1 -1
- package/dist/prompt.js +1 -1
- package/dist/prompt.js.map +1 -1
- package/dist/runtime/index.d.ts +2 -1
- package/dist/runtime/index.js +146 -78
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/outcome.js +6 -6
- package/dist/runtime/outcome.js.map +1 -1
- package/dist/runtime/renderers.js +67 -36
- package/dist/runtime/renderers.js.map +1 -1
- package/dist/schema.d.ts +44 -11
- package/dist/schema.js +21 -1
- package/dist/schema.js.map +1 -1
- package/package.json +4 -4
- package/skills/create-harness/SKILL.md +13 -3
- package/skills/execute-harness/SKILL.md +13 -7
- package/skills/review-harness/SKILL.md +8 -4
package/README.md
CHANGED
|
@@ -10,7 +10,9 @@
|
|
|
10
10
|
Build and run ephemeral task harnesses with my-pi primitives. A
|
|
11
11
|
harness is a `/tmp` runtime containing a machine-readable contract,
|
|
12
12
|
executor prompt, task brief, validation script, review script, logs,
|
|
13
|
-
status, and runtime enforcement.
|
|
13
|
+
status, and runtime enforcement. Inspired by Ornith's self-scaffolding
|
|
14
|
+
design, the runtime separates an immutable outer policy from a
|
|
15
|
+
versioned, amendable inner scaffold.
|
|
14
16
|
|
|
15
17
|
## Installation
|
|
16
18
|
|
|
@@ -33,6 +35,8 @@ pi -e ./packages/pi-harness
|
|
|
33
35
|
|
|
34
36
|
- `/harness` command for create, run, review, status, use, and clear
|
|
35
37
|
- `harness_create` tool to create `/tmp/my-pi-harness-*` runtimes
|
|
38
|
+
- `harness_amend` tool for audited, versioned changes to the inner
|
|
39
|
+
scaffold
|
|
36
40
|
- `harness_update` tool for phase/status/evidence logging
|
|
37
41
|
- generated `OUTCOME.md` and `outcome.json` review artifacts
|
|
38
42
|
- dirty-baseline tracking so pre-existing repo changes are reported
|
|
@@ -49,7 +53,7 @@ pi -e ./packages/pi-harness
|
|
|
49
53
|
|
|
50
54
|
```text
|
|
51
55
|
/tmp/my-pi-harness-<id>/
|
|
52
|
-
harness.json #
|
|
56
|
+
harness.json # outer policy, versioned inner scaffold, amendment history
|
|
53
57
|
SYSTEM.md # executor system prompt
|
|
54
58
|
TASK.md # task brief and required loop
|
|
55
59
|
status.json # phase/status/evidence log
|
|
@@ -74,9 +78,24 @@ pi -e ./packages/pi-harness
|
|
|
74
78
|
|
|
75
79
|
The create/run/review commands prompt the model to use the bundled
|
|
76
80
|
skills. The tools provide the actual runtime and enforcement layer.
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
81
|
+
|
|
82
|
+
`harness.json` contains two deliberately different layers:
|
|
83
|
+
|
|
84
|
+
- `policy`: runtime-owned workspace and verifier protections such as
|
|
85
|
+
cwd, forbidden paths/commands, available tools, and the dirty
|
|
86
|
+
baseline. Executors cannot weaken these through amendments.
|
|
87
|
+
- `scaffold`: the model's task interpretation and execution strategy,
|
|
88
|
+
including allowed paths, validation, test policy, and model roles.
|
|
89
|
+
It is subordinate to system, developer, and current user
|
|
90
|
+
instructions and can be revised with `harness_amend`.
|
|
91
|
+
|
|
92
|
+
Every scaffold amendment increments its version, records its reason
|
|
93
|
+
and requester, regenerates runtime prompts/scripts, and appends an
|
|
94
|
+
audit event. A harness enforcement block reports a contract mismatch;
|
|
95
|
+
it is not a platform-policy refusal. When a harness is active, the TUI
|
|
96
|
+
shows a compact footer/status indicator; use `/harness status [dir]`
|
|
97
|
+
or `harness_read` for the full contract, task, validation, and outcome
|
|
98
|
+
details.
|
|
80
99
|
|
|
81
100
|
Harnesses snapshot dirty files at creation time. Review and outcome
|
|
82
101
|
artifacts focus on changes after that baseline, while still recording
|
|
@@ -36,7 +36,7 @@ function is_test_path(absolute_path) {
|
|
|
36
36
|
/\.(test|spec)\.[cm]?[jt]sx?$/.test(path));
|
|
37
37
|
}
|
|
38
38
|
export function check_path_allowed(contract, input_path) {
|
|
39
|
-
const cwd = resolve(contract.cwd);
|
|
39
|
+
const cwd = resolve(contract.policy.cwd);
|
|
40
40
|
const absolute_path = resolve_project_path(cwd, input_path);
|
|
41
41
|
const inside_cwd = absolute_path === cwd || absolute_path.startsWith(`${cwd}/`);
|
|
42
42
|
if (!inside_cwd) {
|
|
@@ -45,19 +45,20 @@ export function check_path_allowed(contract, input_path) {
|
|
|
45
45
|
reason: `Harness ${contract.id}: path is outside cwd: ${input_path}`,
|
|
46
46
|
};
|
|
47
47
|
}
|
|
48
|
-
if (contract.forbidden_paths.some((pattern) => pattern_matches(cwd, pattern, absolute_path))) {
|
|
48
|
+
if (contract.policy.forbidden_paths.some((pattern) => pattern_matches(cwd, pattern, absolute_path))) {
|
|
49
49
|
return {
|
|
50
50
|
ok: false,
|
|
51
51
|
reason: `Harness ${contract.id}: path is forbidden: ${input_path}`,
|
|
52
52
|
};
|
|
53
53
|
}
|
|
54
|
-
if (!contract.allow_test_changes &&
|
|
54
|
+
if (!contract.scaffold.allow_test_changes &&
|
|
55
|
+
is_test_path(absolute_path)) {
|
|
55
56
|
return {
|
|
56
57
|
ok: false,
|
|
57
58
|
reason: `Harness ${contract.id}: test changes are not allowed by harness.json`,
|
|
58
59
|
};
|
|
59
60
|
}
|
|
60
|
-
if (!contract.allowed_paths.some((pattern) => pattern_matches(cwd, pattern, absolute_path))) {
|
|
61
|
+
if (!contract.scaffold.allowed_paths.some((pattern) => pattern_matches(cwd, pattern, absolute_path))) {
|
|
61
62
|
return {
|
|
62
63
|
ok: false,
|
|
63
64
|
reason: `Harness ${contract.id}: path is outside allowed_paths: ${input_path}`,
|
|
@@ -66,14 +67,14 @@ export function check_path_allowed(contract, input_path) {
|
|
|
66
67
|
return { ok: true };
|
|
67
68
|
}
|
|
68
69
|
export function check_command_allowed(contract, command) {
|
|
69
|
-
const blocked = contract.forbidden_commands.find((needle) => command.includes(needle));
|
|
70
|
+
const blocked = contract.policy.forbidden_commands.find((needle) => command.includes(needle));
|
|
70
71
|
if (blocked) {
|
|
71
72
|
return {
|
|
72
73
|
ok: false,
|
|
73
74
|
reason: `Harness ${contract.id}: command contains forbidden pattern: ${blocked}`,
|
|
74
75
|
};
|
|
75
76
|
}
|
|
76
|
-
if (!contract.allow_test_changes &&
|
|
77
|
+
if (!contract.scaffold.allow_test_changes &&
|
|
77
78
|
/\brm\b.*((^|\/)(__tests__|tests?)\/|\.(test|spec)\.)/.test(command)) {
|
|
78
79
|
return {
|
|
79
80
|
ok: false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/enforcement/policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAG1D,SAAS,oBAAoB,CAC5B,GAAW,EACX,UAAkB;IAElB,OAAO,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,mBAAmB,CAAC,GAAW,EAAE,OAAe;IACxD,MAAM,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACzD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,kBAAkB,CAAC;IACpD,OAAO,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,eAAe,CACvB,GAAW,EACX,OAAe,EACf,aAAqB;IAErB,MAAM,kBAAkB,GAAG,mBAAmB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC7D,MAAM,aAAa,GAAG,QAAQ,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC,UAAU,CAC5D,IAAI,EACJ,GAAG,CACH,CAAC;IACF,IAAI,kBAAkB,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAC5C,IAAI,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/C,OAAO,CACN,aAAa,KAAK,MAAM;YACxB,aAAa,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC,CACtC,CAAC;IACH,CAAC;IACD,IAAI,kBAAkB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,IAAI,MAAM,CACvB,IAAI,kBAAkB;aACpB,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC;aACrC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;aACtB,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAC7B,CAAC;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IAClC,CAAC;IACD,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC;QACjC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;QAClB,CAAC,CAAC,oBAAoB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACtC,OAAO,CACN,aAAa,KAAK,MAAM,IAAI,aAAa,CAAC,UAAU,CAAC,GAAG,MAAM,GAAG,CAAC,CAClE,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,aAAqB;IAC1C,MAAM,IAAI,GAAG,aAAa,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACjD,OAAO,CACN,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC;QACvC,8BAA8B,CAAC,IAAI,CAAC,IAAI,CAAC,CACzC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CACjC,QAAyB,EACzB,UAAkB;IAElB,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"policy.js","sourceRoot":"","sources":["../../src/enforcement/policy.ts"],"names":[],"mappings":"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"}
|
package/dist/extension.js
CHANGED
|
@@ -2,8 +2,8 @@ import { existsSync } from 'node:fs';
|
|
|
2
2
|
import { check_command_allowed, check_path_allowed, } from './enforcement/policy.js';
|
|
3
3
|
import { HARNESS_SYSTEM_PROMPT } from './prompt.js';
|
|
4
4
|
import { harness_paths, read_contract } from './runtime/files.js';
|
|
5
|
-
import { active_harness_context, create_harness_runtime, format_harness_status_line, format_harness_summary, update_harness_runtime, } from './runtime/index.js';
|
|
6
|
-
import { HARNESS_CUSTOM_TYPE, harness_create_params_schema, harness_read_params_schema, harness_update_params_schema, } from './schema.js';
|
|
5
|
+
import { active_harness_context, amend_harness_runtime, create_harness_runtime, format_harness_status_line, format_harness_summary, update_harness_runtime, } from './runtime/index.js';
|
|
6
|
+
import { HARNESS_CUSTOM_TYPE, harness_amend_params_schema, harness_create_params_schema, harness_read_params_schema, harness_update_params_schema, } from './schema.js';
|
|
7
7
|
function persist_active_harness(pi, harness_dir) {
|
|
8
8
|
pi.appendEntry(HARNESS_CUSTOM_TYPE, {
|
|
9
9
|
active_harness_dir: harness_dir,
|
|
@@ -82,7 +82,7 @@ export default async function harness(pi) {
|
|
|
82
82
|
return;
|
|
83
83
|
}
|
|
84
84
|
set_active_harness(harness_dir, ctx);
|
|
85
|
-
pi.sendUserMessage(`Use the execute-harness skill to run this harness until validation completes: ${harness_dir}. If the team tool is available, create or reuse a team
|
|
85
|
+
pi.sendUserMessage(`Use the execute-harness skill to run this harness until validation completes: ${harness_dir}. If the team tool is available, create or reuse a team and create a task for this harness. Use one mutating teammate only when useful; use a worktree only when isolation and merge ownership are explicit. Then inspect team status/results before reporting.`);
|
|
86
86
|
return;
|
|
87
87
|
}
|
|
88
88
|
if (command === 'review') {
|
|
@@ -114,6 +114,22 @@ export default async function harness(pi) {
|
|
|
114
114
|
return tool_text(`Created harness ${contract.id}\n${format_harness_summary(harness_dir)}`);
|
|
115
115
|
},
|
|
116
116
|
});
|
|
117
|
+
pi.registerTool({
|
|
118
|
+
name: 'harness_amend',
|
|
119
|
+
label: 'Amend Harness Scaffold',
|
|
120
|
+
description: 'Amend the active execution scaffold with an audited version change. Cannot weaken the outer runtime policy.',
|
|
121
|
+
promptSnippet: 'Amend task scope, validation, test policy, or model strategy when user direction or evidence changes',
|
|
122
|
+
promptGuidelines: [
|
|
123
|
+
'Use harness_amend for legitimate changes to the inner scaffold instead of treating the active harness as immutable.',
|
|
124
|
+
'Outer policy fields such as cwd, forbidden paths, forbidden commands, and tool availability cannot be amended.',
|
|
125
|
+
],
|
|
126
|
+
parameters: harness_amend_params_schema,
|
|
127
|
+
async execute(_tool_call_id, params, _signal, _on_update, ctx) {
|
|
128
|
+
const contract = amend_harness_runtime(params);
|
|
129
|
+
set_active_harness(params.harness_dir, ctx);
|
|
130
|
+
return tool_text(`Amended harness ${contract.id} scaffold to v${contract.scaffold.version}`);
|
|
131
|
+
},
|
|
132
|
+
});
|
|
117
133
|
pi.registerTool({
|
|
118
134
|
name: 'harness_update',
|
|
119
135
|
label: 'Update Harness',
|
package/dist/extension.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,11 +1,27 @@
|
|
|
1
1
|
export { check_command_allowed, check_path_allowed, } from './enforcement/policy.js';
|
|
2
2
|
export { default, should_inject_harness_prompt, } from './extension.js';
|
|
3
3
|
export { HARNESS_SYSTEM_PROMPT } from './prompt.js';
|
|
4
|
-
export { active_harness_context, create_harness_runtime, format_harness_status_line, format_harness_summary, update_harness_runtime, } from './runtime/index.js';
|
|
4
|
+
export { active_harness_context, amend_harness_runtime, create_harness_runtime, format_harness_status_line, format_harness_summary, update_harness_runtime, } from './runtime/index.js';
|
|
5
5
|
export { collect_harness_outcome, render_outcome_markdown, write_outcome_artifacts, } from './runtime/outcome.js';
|
|
6
|
-
export { DEFAULT_FORBIDDEN_COMMANDS, harness_create_params_schema, HARNESS_CUSTOM_TYPE, harness_read_params_schema, harness_update_params_schema, HARNESS_VERSION, thinking_levels_schema, } from './schema.js';
|
|
7
|
-
export type { HarnessContract, HarnessCreateParams, HarnessLogEntry, HarnessOutcome, HarnessReadParams, HarnessStatus, HarnessStatusFile, HarnessThinking, HarnessUpdateParams, } from './schema.js';
|
|
6
|
+
export { DEFAULT_FORBIDDEN_COMMANDS, harness_amend_params_schema, harness_create_params_schema, HARNESS_CUSTOM_TYPE, harness_read_params_schema, harness_update_params_schema, HARNESS_VERSION, thinking_levels_schema, } from './schema.js';
|
|
7
|
+
export type { HarnessAmendment, HarnessAmendParams, HarnessContract, HarnessCreateParams, HarnessLogEntry, HarnessOutcome, HarnessPolicy, HarnessReadParams, HarnessScaffold, HarnessStatus, HarnessStatusFile, HarnessThinking, HarnessUpdateParams, } from './schema.js';
|
|
8
8
|
export declare const testing: {
|
|
9
|
+
harness_amend_params_schema: import("typebox").TObject<{
|
|
10
|
+
harness_dir: import("typebox").TString;
|
|
11
|
+
reason: import("typebox").TString;
|
|
12
|
+
requested_by: import("typebox").TOptional<import("typebox").TUnion<[import("typebox").TLiteral<"user">, import("typebox").TLiteral<"planner">]>>;
|
|
13
|
+
task: import("typebox").TOptional<import("typebox").TString>;
|
|
14
|
+
allowed_paths: import("typebox").TOptional<import("typebox").TArray<import("typebox").TString>>;
|
|
15
|
+
validation_commands: import("typebox").TOptional<import("typebox").TArray<import("typebox").TString>>;
|
|
16
|
+
allow_test_changes: import("typebox").TOptional<import("typebox").TBoolean>;
|
|
17
|
+
escalation_rules: import("typebox").TOptional<import("typebox").TArray<import("typebox").TString>>;
|
|
18
|
+
planner_model: import("typebox").TOptional<import("typebox").TString>;
|
|
19
|
+
planner_thinking: import("typebox").TOptional<import("typebox").TUnion<[import("typebox").TLiteral<"off">, import("typebox").TLiteral<"minimal">, import("typebox").TLiteral<"low">, import("typebox").TLiteral<"medium">, import("typebox").TLiteral<"high">, import("typebox").TLiteral<"xhigh">]>>;
|
|
20
|
+
executor_model: import("typebox").TOptional<import("typebox").TString>;
|
|
21
|
+
executor_thinking: import("typebox").TOptional<import("typebox").TUnion<[import("typebox").TLiteral<"off">, import("typebox").TLiteral<"minimal">, import("typebox").TLiteral<"low">, import("typebox").TLiteral<"medium">, import("typebox").TLiteral<"high">, import("typebox").TLiteral<"xhigh">]>>;
|
|
22
|
+
reviewer_model: import("typebox").TOptional<import("typebox").TString>;
|
|
23
|
+
reviewer_thinking: import("typebox").TOptional<import("typebox").TUnion<[import("typebox").TLiteral<"off">, import("typebox").TLiteral<"minimal">, import("typebox").TLiteral<"low">, import("typebox").TLiteral<"medium">, import("typebox").TLiteral<"high">, import("typebox").TLiteral<"xhigh">]>>;
|
|
24
|
+
}>;
|
|
9
25
|
harness_create_params_schema: import("typebox").TObject<{
|
|
10
26
|
task: import("typebox").TString;
|
|
11
27
|
slug: import("typebox").TOptional<import("typebox").TString>;
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { harness_create_params_schema, harness_read_params_schema, harness_update_params_schema, } from './schema.js';
|
|
1
|
+
import { harness_amend_params_schema, harness_create_params_schema, harness_read_params_schema, harness_update_params_schema, } from './schema.js';
|
|
2
2
|
export { check_command_allowed, check_path_allowed, } from './enforcement/policy.js';
|
|
3
3
|
export { default, should_inject_harness_prompt, } from './extension.js';
|
|
4
4
|
export { HARNESS_SYSTEM_PROMPT } from './prompt.js';
|
|
5
|
-
export { active_harness_context, create_harness_runtime, format_harness_status_line, format_harness_summary, update_harness_runtime, } from './runtime/index.js';
|
|
5
|
+
export { active_harness_context, amend_harness_runtime, create_harness_runtime, format_harness_status_line, format_harness_summary, update_harness_runtime, } from './runtime/index.js';
|
|
6
6
|
export { collect_harness_outcome, render_outcome_markdown, write_outcome_artifacts, } from './runtime/outcome.js';
|
|
7
|
-
export { DEFAULT_FORBIDDEN_COMMANDS, harness_create_params_schema, HARNESS_CUSTOM_TYPE, harness_read_params_schema, harness_update_params_schema, HARNESS_VERSION, thinking_levels_schema, } from './schema.js';
|
|
7
|
+
export { DEFAULT_FORBIDDEN_COMMANDS, harness_amend_params_schema, harness_create_params_schema, HARNESS_CUSTOM_TYPE, harness_read_params_schema, harness_update_params_schema, HARNESS_VERSION, thinking_levels_schema, } from './schema.js';
|
|
8
8
|
export const testing = {
|
|
9
|
+
harness_amend_params_schema,
|
|
9
10
|
harness_create_params_schema,
|
|
10
11
|
harness_read_params_schema,
|
|
11
12
|
harness_update_params_schema,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,4BAA4B,EAC5B,0BAA0B,EAC1B,4BAA4B,GAC5B,MAAM,aAAa,CAAC;AAErB,OAAO,EACN,qBAAqB,EACrB,kBAAkB,GAClB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,OAAO,EACP,4BAA4B,GAC5B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EACN,sBAAsB,EACtB,sBAAsB,EACtB,0BAA0B,EAC1B,sBAAsB,EACtB,sBAAsB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACN,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACN,0BAA0B,EAC1B,4BAA4B,EAC5B,mBAAmB,EACnB,0BAA0B,EAC1B,4BAA4B,EAC5B,eAAe,EACf,sBAAsB,GACtB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,2BAA2B,EAC3B,4BAA4B,EAC5B,0BAA0B,EAC1B,4BAA4B,GAC5B,MAAM,aAAa,CAAC;AAErB,OAAO,EACN,qBAAqB,EACrB,kBAAkB,GAClB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACN,OAAO,EACP,4BAA4B,GAC5B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EACN,sBAAsB,EACtB,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,sBAAsB,EACtB,sBAAsB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACN,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,GACvB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACN,0BAA0B,EAC1B,2BAA2B,EAC3B,4BAA4B,EAC5B,mBAAmB,EACnB,0BAA0B,EAC1B,4BAA4B,EAC5B,eAAe,EACf,sBAAsB,GACtB,MAAM,aAAa,CAAC;AAiBrB,MAAM,CAAC,MAAM,OAAO,GAAG;IACtB,2BAA2B;IAC3B,4BAA4B;IAC5B,0BAA0B;IAC1B,4BAA4B;CAC5B,CAAC"}
|
package/dist/prompt.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const HARNESS_SYSTEM_PROMPT = "## my-pi harness workflow\n\nFor ambiguous, risky, or multi-step coding tasks, prefer a real harness instead of a prose-only plan. A harness is an ephemeral /tmp runtime with harness.json, SYSTEM.md, TASK.md, status.json, validation scripts, logs, and enforcement rules. Use the bundled create-harness skill plus
|
|
1
|
+
export declare const HARNESS_SYSTEM_PROMPT = "## my-pi harness workflow\n\nFor ambiguous, risky, or multi-step coding tasks, prefer a real harness instead of a prose-only plan. A harness is an ephemeral /tmp runtime with harness.json, SYSTEM.md, TASK.md, status.json, validation scripts, logs, and enforcement rules. Its outer policy is runtime-owned; its versioned inner scaffold is an amendable execution plan subordinate to system, developer, and current user instructions. Use the bundled create-harness skill plus harness_create to build it, harness_amend when legitimate scope or strategy changes, then execute until validation and review are complete.";
|
package/dist/prompt.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export const HARNESS_SYSTEM_PROMPT = `## my-pi harness workflow
|
|
2
2
|
|
|
3
|
-
For ambiguous, risky, or multi-step coding tasks, prefer a real harness instead of a prose-only plan. A harness is an ephemeral /tmp runtime with harness.json, SYSTEM.md, TASK.md, status.json, validation scripts, logs, and enforcement rules. Use the bundled create-harness skill plus
|
|
3
|
+
For ambiguous, risky, or multi-step coding tasks, prefer a real harness instead of a prose-only plan. A harness is an ephemeral /tmp runtime with harness.json, SYSTEM.md, TASK.md, status.json, validation scripts, logs, and enforcement rules. Its outer policy is runtime-owned; its versioned inner scaffold is an amendable execution plan subordinate to system, developer, and current user instructions. Use the bundled create-harness skill plus harness_create to build it, harness_amend when legitimate scope or strategy changes, then execute until validation and review are complete.`;
|
|
4
4
|
//# sourceMappingURL=prompt.js.map
|
package/dist/prompt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG;;
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG;;wkBAEmiB,CAAC"}
|
package/dist/runtime/index.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { type HarnessContract, type HarnessCreateParams, type HarnessStatusFile, type HarnessUpdateParams } from '../schema.js';
|
|
1
|
+
import { type HarnessAmendParams, type HarnessContract, type HarnessCreateParams, type HarnessStatusFile, type HarnessUpdateParams } from '../schema.js';
|
|
2
2
|
export declare function create_harness_runtime(params: HarnessCreateParams, default_cwd: string): {
|
|
3
3
|
harness_dir: string;
|
|
4
4
|
contract: HarnessContract;
|
|
5
5
|
};
|
|
6
|
+
export declare function amend_harness_runtime(params: HarnessAmendParams): HarnessContract;
|
|
6
7
|
export declare function update_harness_runtime(params: HarnessUpdateParams): HarnessStatusFile;
|
|
7
8
|
export declare function format_harness_status_line(harness_dir: string): string;
|
|
8
9
|
export declare function format_harness_summary(harness_dir: string): string;
|
package/dist/runtime/index.js
CHANGED
|
@@ -9,99 +9,173 @@ function now_iso() {
|
|
|
9
9
|
return new Date().toISOString();
|
|
10
10
|
}
|
|
11
11
|
function slugify(input) {
|
|
12
|
-
|
|
12
|
+
return (input
|
|
13
13
|
.toLowerCase()
|
|
14
14
|
.replace(/[^a-z0-9]+/g, '-')
|
|
15
15
|
.replace(/^-+|-+$/g, '')
|
|
16
|
-
.slice(0, 48);
|
|
17
|
-
|
|
16
|
+
.slice(0, 48) || 'task');
|
|
17
|
+
}
|
|
18
|
+
function write_generated_runtime(harness_dir, contract) {
|
|
19
|
+
const paths = harness_paths(harness_dir);
|
|
20
|
+
writeFileSync(paths.system, build_system_markdown(contract));
|
|
21
|
+
writeFileSync(paths.task, build_task_markdown(contract));
|
|
22
|
+
writeFileSync(paths.validate, build_validate_script(contract));
|
|
23
|
+
writeFileSync(paths.guard, build_guard_script());
|
|
24
|
+
writeFileSync(paths.outcome_script, build_outcome_script());
|
|
25
|
+
writeFileSync(paths.review, build_review_script(contract, paths.guard, paths.outcome_script));
|
|
26
|
+
chmodSync(paths.validate, 0o755);
|
|
27
|
+
chmodSync(paths.review, 0o755);
|
|
18
28
|
}
|
|
19
29
|
export function create_harness_runtime(params, default_cwd) {
|
|
20
30
|
const cwd = resolve(params.cwd ?? default_cwd);
|
|
21
|
-
const
|
|
22
|
-
const id = `${slug}-${Date.now().toString(36)}`;
|
|
31
|
+
const id = `${slugify(params.slug ?? params.task)}-${Date.now().toString(36)}`;
|
|
23
32
|
const harness_dir = join(tmpdir(), `my-pi-harness-${id}`);
|
|
24
33
|
const paths = harness_paths(harness_dir);
|
|
25
34
|
mkdirSync(paths.logs, { recursive: true });
|
|
35
|
+
const created_at = now_iso();
|
|
26
36
|
const contract = {
|
|
27
37
|
version: HARNESS_VERSION,
|
|
28
38
|
id,
|
|
29
|
-
|
|
30
|
-
cwd,
|
|
31
|
-
created_at: now_iso(),
|
|
39
|
+
created_at,
|
|
32
40
|
status: 'created',
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
41
|
+
policy: {
|
|
42
|
+
cwd,
|
|
43
|
+
forbidden_paths: params.forbidden_paths ?? [
|
|
44
|
+
'.git/**',
|
|
45
|
+
'node_modules/**',
|
|
46
|
+
'dist/**',
|
|
47
|
+
'.env',
|
|
48
|
+
'.env.*',
|
|
49
|
+
],
|
|
50
|
+
allowed_tools: [
|
|
51
|
+
'read',
|
|
52
|
+
'bash',
|
|
53
|
+
'edit',
|
|
54
|
+
'write',
|
|
55
|
+
'lsp_diagnostics',
|
|
56
|
+
],
|
|
57
|
+
forbidden_commands: [
|
|
58
|
+
...DEFAULT_FORBIDDEN_COMMANDS,
|
|
59
|
+
...(params.forbidden_commands ?? []),
|
|
60
|
+
],
|
|
61
|
+
baseline_changed_files: collect_git_changed_files(cwd),
|
|
36
62
|
},
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
63
|
+
scaffold: {
|
|
64
|
+
version: 1,
|
|
65
|
+
task: params.task,
|
|
66
|
+
planner: {
|
|
67
|
+
model: params.planner_model,
|
|
68
|
+
thinking: params.planner_thinking,
|
|
69
|
+
},
|
|
70
|
+
executor: {
|
|
71
|
+
model: params.executor_model,
|
|
72
|
+
thinking: params.executor_thinking ?? 'low',
|
|
73
|
+
},
|
|
74
|
+
reviewer: {
|
|
75
|
+
model: params.reviewer_model,
|
|
76
|
+
thinking: params.reviewer_thinking ?? 'high',
|
|
77
|
+
},
|
|
78
|
+
allowed_paths: params.allowed_paths ?? ['.'],
|
|
79
|
+
validation_commands: params.validation_commands ?? [],
|
|
80
|
+
allow_test_changes: params.allow_test_changes ?? false,
|
|
81
|
+
escalation_rules: [
|
|
82
|
+
'Required context contradicts the active scaffold or TASK.md.',
|
|
83
|
+
'Implementation needs edits outside scaffold.allowed_paths.',
|
|
84
|
+
'Validation requires weakening tests or changing public behavior outside the scaffold.',
|
|
85
|
+
'Validation still fails after one focused fix attempt.',
|
|
86
|
+
],
|
|
44
87
|
},
|
|
45
|
-
|
|
46
|
-
forbidden_paths: params.forbidden_paths ?? [
|
|
47
|
-
'.git/**',
|
|
48
|
-
'node_modules/**',
|
|
49
|
-
'dist/**',
|
|
50
|
-
'.env',
|
|
51
|
-
'.env.*',
|
|
52
|
-
],
|
|
53
|
-
allowed_tools: [
|
|
54
|
-
'read',
|
|
55
|
-
'bash',
|
|
56
|
-
'edit',
|
|
57
|
-
'write',
|
|
58
|
-
'lsp_diagnostics',
|
|
59
|
-
],
|
|
60
|
-
validation_commands: params.validation_commands ?? [],
|
|
61
|
-
forbidden_commands: [
|
|
62
|
-
...DEFAULT_FORBIDDEN_COMMANDS,
|
|
63
|
-
...(params.forbidden_commands ?? []),
|
|
64
|
-
],
|
|
65
|
-
allow_test_changes: params.allow_test_changes ?? false,
|
|
66
|
-
baseline_changed_files: collect_git_changed_files(cwd),
|
|
67
|
-
escalation_rules: [
|
|
68
|
-
'Required context contradicts harness.json or TASK.md.',
|
|
69
|
-
'Implementation needs edits outside allowed_paths.',
|
|
70
|
-
'Validation requires weakening tests or changing public behavior outside the contract.',
|
|
71
|
-
'Validation still fails after one focused fix attempt.',
|
|
72
|
-
],
|
|
88
|
+
amendments: [],
|
|
73
89
|
};
|
|
74
90
|
write_contract(harness_dir, contract);
|
|
75
|
-
writeFileSync(paths.system, build_system_markdown(contract));
|
|
76
|
-
writeFileSync(paths.task, build_task_markdown(contract));
|
|
77
91
|
write_status(harness_dir, {
|
|
78
92
|
id,
|
|
79
93
|
status: 'created',
|
|
80
94
|
log: [
|
|
81
95
|
{
|
|
82
|
-
timestamp:
|
|
96
|
+
timestamp: created_at,
|
|
83
97
|
status: 'created',
|
|
84
98
|
note: 'Harness created',
|
|
85
99
|
},
|
|
86
100
|
],
|
|
87
101
|
});
|
|
88
|
-
|
|
89
|
-
writeFileSync(paths.guard, build_guard_script());
|
|
90
|
-
writeFileSync(paths.outcome_script, build_outcome_script());
|
|
102
|
+
write_generated_runtime(harness_dir, contract);
|
|
91
103
|
write_outcome_artifacts(harness_dir);
|
|
92
|
-
writeFileSync(paths.review, build_review_script(contract, paths.guard, paths.outcome_script));
|
|
93
|
-
chmodSync(paths.validate, 0o755);
|
|
94
|
-
chmodSync(paths.review, 0o755);
|
|
95
104
|
append_event(harness_dir, {
|
|
96
|
-
timestamp:
|
|
105
|
+
timestamp: created_at,
|
|
97
106
|
status: 'created',
|
|
98
107
|
note: 'Harness runtime initialized',
|
|
99
108
|
});
|
|
100
109
|
return { harness_dir, contract };
|
|
101
110
|
}
|
|
111
|
+
export function amend_harness_runtime(params) {
|
|
112
|
+
const contract = read_contract(params.harness_dir);
|
|
113
|
+
const scaffold = contract.scaffold;
|
|
114
|
+
const changes = [];
|
|
115
|
+
const assign = (key, value) => {
|
|
116
|
+
if (value !== undefined) {
|
|
117
|
+
scaffold[key] = value;
|
|
118
|
+
changes.push(String(key));
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
assign('task', params.task);
|
|
122
|
+
assign('allowed_paths', params.allowed_paths);
|
|
123
|
+
assign('validation_commands', params.validation_commands);
|
|
124
|
+
assign('allow_test_changes', params.allow_test_changes);
|
|
125
|
+
assign('escalation_rules', params.escalation_rules);
|
|
126
|
+
if (params.planner_model !== undefined ||
|
|
127
|
+
params.planner_thinking !== undefined) {
|
|
128
|
+
scaffold.planner = {
|
|
129
|
+
model: params.planner_model ?? scaffold.planner.model,
|
|
130
|
+
thinking: params.planner_thinking ?? scaffold.planner.thinking,
|
|
131
|
+
};
|
|
132
|
+
changes.push('planner');
|
|
133
|
+
}
|
|
134
|
+
if (params.executor_model !== undefined ||
|
|
135
|
+
params.executor_thinking !== undefined) {
|
|
136
|
+
scaffold.executor = {
|
|
137
|
+
model: params.executor_model ?? scaffold.executor.model,
|
|
138
|
+
thinking: params.executor_thinking ?? scaffold.executor.thinking,
|
|
139
|
+
};
|
|
140
|
+
changes.push('executor');
|
|
141
|
+
}
|
|
142
|
+
if (params.reviewer_model !== undefined ||
|
|
143
|
+
params.reviewer_thinking !== undefined) {
|
|
144
|
+
scaffold.reviewer = {
|
|
145
|
+
model: params.reviewer_model ?? scaffold.reviewer.model,
|
|
146
|
+
thinking: params.reviewer_thinking ?? scaffold.reviewer.thinking,
|
|
147
|
+
};
|
|
148
|
+
changes.push('reviewer');
|
|
149
|
+
}
|
|
150
|
+
if (!changes.length)
|
|
151
|
+
throw new Error('Harness amendment contains no scaffold changes');
|
|
152
|
+
const from_version = scaffold.version;
|
|
153
|
+
scaffold.version += 1;
|
|
154
|
+
const timestamp = now_iso();
|
|
155
|
+
contract.amendments.push({
|
|
156
|
+
timestamp,
|
|
157
|
+
requested_by: params.requested_by ?? 'user',
|
|
158
|
+
reason: params.reason,
|
|
159
|
+
from_version,
|
|
160
|
+
to_version: scaffold.version,
|
|
161
|
+
changes,
|
|
162
|
+
});
|
|
163
|
+
write_contract(params.harness_dir, contract);
|
|
164
|
+
write_generated_runtime(params.harness_dir, contract);
|
|
165
|
+
const entry = {
|
|
166
|
+
timestamp,
|
|
167
|
+
note: `Scaffold amended v${from_version} → v${scaffold.version}: ${params.reason}`,
|
|
168
|
+
};
|
|
169
|
+
const status = read_status(params.harness_dir);
|
|
170
|
+
status.log.push(entry);
|
|
171
|
+
write_status(params.harness_dir, status);
|
|
172
|
+
append_event(params.harness_dir, entry);
|
|
173
|
+
write_outcome_artifacts(params.harness_dir);
|
|
174
|
+
return contract;
|
|
175
|
+
}
|
|
102
176
|
export function update_harness_runtime(params) {
|
|
103
177
|
const contract = read_contract(params.harness_dir);
|
|
104
|
-
const
|
|
178
|
+
const status = read_status(params.harness_dir);
|
|
105
179
|
const entry = {
|
|
106
180
|
timestamp: now_iso(),
|
|
107
181
|
status: params.status,
|
|
@@ -113,46 +187,40 @@ export function update_harness_runtime(params) {
|
|
|
113
187
|
changed_files: params.changed_files,
|
|
114
188
|
};
|
|
115
189
|
if (params.status) {
|
|
116
|
-
|
|
190
|
+
status.status = params.status;
|
|
117
191
|
contract.status = params.status;
|
|
118
192
|
}
|
|
119
193
|
if (params.phase)
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
write_status(params.harness_dir,
|
|
194
|
+
status.phase = params.phase;
|
|
195
|
+
status.log.push(entry);
|
|
196
|
+
write_status(params.harness_dir, status);
|
|
123
197
|
write_contract(params.harness_dir, contract);
|
|
124
198
|
append_event(params.harness_dir, entry);
|
|
125
199
|
write_outcome_artifacts(params.harness_dir);
|
|
126
|
-
return
|
|
200
|
+
return status;
|
|
127
201
|
}
|
|
128
202
|
export function format_harness_status_line(harness_dir) {
|
|
129
|
-
const
|
|
130
|
-
return `🧪 ${
|
|
203
|
+
const status = read_status(harness_dir);
|
|
204
|
+
return `🧪 ${status.status}${status.phase ? ` (${status.phase})` : ''}`;
|
|
131
205
|
}
|
|
132
206
|
export function format_harness_summary(harness_dir) {
|
|
133
207
|
const contract = read_contract(harness_dir);
|
|
134
|
-
const
|
|
208
|
+
const status = read_status(harness_dir);
|
|
135
209
|
return [
|
|
136
210
|
`Harness: ${contract.id}`,
|
|
137
211
|
`Directory: ${harness_dir}`,
|
|
138
|
-
`Status: ${
|
|
139
|
-
`
|
|
140
|
-
`
|
|
141
|
-
`
|
|
212
|
+
`Status: ${status.status}${status.phase ? ` (${status.phase})` : ''}`,
|
|
213
|
+
`Scaffold: v${contract.scaffold.version} (${contract.amendments.length} amendments)`,
|
|
214
|
+
`Task: ${contract.scaffold.task}`,
|
|
215
|
+
`Allowed paths: ${contract.scaffold.allowed_paths.join(', ') || '(none)'}`,
|
|
216
|
+
`Validation: ${contract.scaffold.validation_commands.join(' && ') || '(none)'}`,
|
|
142
217
|
`Outcome: ${harness_paths(harness_dir).outcome_markdown}`,
|
|
143
218
|
].join('\n');
|
|
144
219
|
}
|
|
145
220
|
export function active_harness_context(harness_dir) {
|
|
146
221
|
const paths = harness_paths(harness_dir);
|
|
147
222
|
const contract = read_contract(harness_dir);
|
|
148
|
-
const
|
|
149
|
-
return `## Active my-pi harness
|
|
150
|
-
|
|
151
|
-
Harness directory: \`${harness_dir}\`
|
|
152
|
-
Harness id: \`${contract.id}\`
|
|
153
|
-
Status: \`${status_file.status}\`
|
|
154
|
-
Project cwd: \`${contract.cwd}\`
|
|
155
|
-
|
|
156
|
-
Read \`${paths.system}\`, \`${paths.task}\`, and \`${paths.contract}\` before work. Use \`harness_update\` to record phase changes, decisions, validation evidence, team status, remaining risks, and completion. Run \`${paths.validate}\` before declaring completion and \`${paths.review}\` before final review. Review \`${paths.outcome_markdown}\` or \`${paths.outcome}\` for the final outcome artifact.`;
|
|
223
|
+
const status = read_status(harness_dir);
|
|
224
|
+
return `## Active my-pi harness\n\nHarness directory: \`${harness_dir}\`\nHarness id: \`${contract.id}\`\nStatus: \`${status.status}\`\nProject cwd: \`${contract.policy.cwd}\`\nScaffold version: \`${contract.scaffold.version}\`\n\nThe outer policy is runtime-enforced. The inner scaffold is an amendable execution plan subordinate to system, developer, and current user instructions. If the user changes scope or evidence contradicts the scaffold, use \`harness_amend\`; a harness block is not a platform-policy refusal. Read \`${paths.system}\`, \`${paths.task}\`, and \`${paths.contract}\` before work. Use \`harness_update\` for progress and evidence. Run \`${paths.validate}\` and \`${paths.review}\` before completion.`;
|
|
157
225
|
}
|
|
158
226
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EACN,0BAA0B,EAC1B,eAAe,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime/outcome.js
CHANGED
|
@@ -46,7 +46,7 @@ function latest_log_value(log, key) {
|
|
|
46
46
|
export function collect_harness_outcome(harness_dir, cwd = process.env.HARNESS_CWD) {
|
|
47
47
|
const contract = read_contract(harness_dir);
|
|
48
48
|
const status_file = read_status(harness_dir);
|
|
49
|
-
const execution_cwd = resolve(cwd ?? contract.cwd);
|
|
49
|
+
const execution_cwd = resolve(cwd ?? contract.policy.cwd);
|
|
50
50
|
const validation_evidence = status_file.log
|
|
51
51
|
.filter((entry) => entry.evidence)
|
|
52
52
|
.map((entry) => ({
|
|
@@ -62,14 +62,14 @@ export function collect_harness_outcome(harness_dir, cwd = process.env.HARNESS_C
|
|
|
62
62
|
id: contract.id,
|
|
63
63
|
status: status_file.status,
|
|
64
64
|
phase: status_file.phase,
|
|
65
|
-
task: contract.task,
|
|
66
|
-
cwd: contract.cwd,
|
|
65
|
+
task: contract.scaffold.task,
|
|
66
|
+
cwd: contract.policy.cwd,
|
|
67
67
|
execution_cwd,
|
|
68
68
|
generated_at: now_iso(),
|
|
69
|
-
changed_files: changed_files(execution_cwd, status_file.log, contract.baseline_changed_files),
|
|
70
|
-
baseline_changed_files: contract.baseline_changed_files,
|
|
69
|
+
changed_files: changed_files(execution_cwd, status_file.log, contract.policy.baseline_changed_files),
|
|
70
|
+
baseline_changed_files: contract.policy.baseline_changed_files,
|
|
71
71
|
validation: {
|
|
72
|
-
commands: contract.validation_commands,
|
|
72
|
+
commands: contract.scaffold.validation_commands,
|
|
73
73
|
evidence: validation_evidence,
|
|
74
74
|
},
|
|
75
75
|
team_status: latest_log_value(status_file.log, 'team_status') ??
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outcome.js","sourceRoot":"","sources":["../../src/runtime/outcome.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"outcome.js","sourceRoot":"","sources":["../../src/runtime/outcome.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,24 +2,30 @@ import { shell_quote } from './files.js';
|
|
|
2
2
|
export function build_system_markdown(contract) {
|
|
3
3
|
return `# Executor system prompt: ${contract.id}
|
|
4
4
|
|
|
5
|
-
You are working inside a my-pi task harness. The harness directory is external control state, not
|
|
5
|
+
You are working inside a my-pi task harness. The harness directory is external control state, not project source. System, developer, and current user instructions remain authoritative.
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## Outer policy (runtime-enforced)
|
|
8
8
|
|
|
9
|
-
- Project cwd: \`${contract.cwd}\`
|
|
10
|
-
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
- Project cwd: \`${contract.policy.cwd}\`
|
|
10
|
+
- Forbidden edit paths: ${contract.policy.forbidden_paths.map((path) => `\`${path}\``).join(', ') || 'none'}
|
|
11
|
+
|
|
12
|
+
The outer policy protects the workspace and verifier. It cannot be weakened by the executor or by \`harness_amend\`.
|
|
13
|
+
|
|
14
|
+
## Inner scaffold v${contract.scaffold.version} (amendable execution plan)
|
|
15
|
+
|
|
16
|
+
- Allowed edit paths: ${contract.scaffold.allowed_paths.map((path) => `\`${path}\``).join(', ') || 'none'}
|
|
17
|
+
- Test changes allowed: ${contract.scaffold.allow_test_changes ? 'yes' : 'no'}
|
|
18
|
+
- Validation: ${contract.scaffold.validation_commands.map((command) => `\`${command}\``).join(', ') || 'none'}
|
|
14
19
|
|
|
15
20
|
## Rules
|
|
16
21
|
|
|
17
22
|
1. Recover context from source-of-truth files before editing.
|
|
18
|
-
2. Challenge assumptions and record decisions
|
|
19
|
-
3.
|
|
20
|
-
4.
|
|
21
|
-
5.
|
|
22
|
-
6.
|
|
23
|
+
2. Challenge assumptions and record decisions through \`harness_update\`.
|
|
24
|
+
3. Treat the scaffold as subordinate to later user instructions. Use \`harness_amend\` when legitimate scope or strategy changes; a harness block is not a platform-policy refusal.
|
|
25
|
+
4. Edit only allowed paths.
|
|
26
|
+
5. Do not weaken tests, fake outputs, or bypass validation.
|
|
27
|
+
6. Run \`validate.sh\` before completion.
|
|
28
|
+
7. Escalate instead of silently expanding the outer policy.
|
|
23
29
|
`;
|
|
24
30
|
}
|
|
25
31
|
export function build_task_markdown(contract) {
|
|
@@ -27,7 +33,7 @@ export function build_task_markdown(contract) {
|
|
|
27
33
|
|
|
28
34
|
## Task
|
|
29
35
|
|
|
30
|
-
${contract.task}
|
|
36
|
+
${contract.scaffold.task}
|
|
31
37
|
|
|
32
38
|
## Required loop
|
|
33
39
|
|
|
@@ -42,26 +48,28 @@ ${contract.task}
|
|
|
42
48
|
|
|
43
49
|
## Escalation rules
|
|
44
50
|
|
|
45
|
-
${contract.escalation_rules.map((rule) => `- ${rule}`).join('\n')}
|
|
51
|
+
${contract.scaffold.escalation_rules.map((rule) => `- ${rule}`).join('\n')}
|
|
46
52
|
`;
|
|
47
53
|
}
|
|
48
54
|
function build_resolve_cwd_script(contract) {
|
|
49
|
-
return `contract_cwd=${shell_quote(contract.cwd)}
|
|
50
|
-
run_cwd="
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
+
return `contract_cwd=${shell_quote(contract.policy.cwd)}
|
|
56
|
+
run_cwd="$(pwd)"
|
|
57
|
+
contract_common=$(git -C "$contract_cwd" rev-parse --path-format=absolute --git-common-dir 2>/dev/null || true)
|
|
58
|
+
run_common=$(git -C "$run_cwd" rev-parse --path-format=absolute --git-common-dir 2>/dev/null || true)
|
|
59
|
+
if [ -z "$contract_common" ] || [ "$run_common" != "$contract_common" ]; then
|
|
60
|
+
candidate="\${HARNESS_CWD:-$contract_cwd}"
|
|
61
|
+
candidate_common=$(git -C "$candidate" rev-parse --path-format=absolute --git-common-dir 2>/dev/null || true)
|
|
62
|
+
if [ -n "$contract_common" ] && [ "$candidate_common" = "$contract_common" ]; then
|
|
63
|
+
run_cwd="$candidate"
|
|
64
|
+
else
|
|
55
65
|
run_cwd="$contract_cwd"
|
|
56
66
|
fi
|
|
57
|
-
else
|
|
58
|
-
run_cwd="$contract_cwd"
|
|
59
67
|
fi
|
|
60
68
|
export HARNESS_CWD="$run_cwd"`;
|
|
61
69
|
}
|
|
62
70
|
export function build_validate_script(contract) {
|
|
63
|
-
const commands = contract.validation_commands.length
|
|
64
|
-
? contract.validation_commands
|
|
71
|
+
const commands = contract.scaffold.validation_commands.length
|
|
72
|
+
? contract.scaffold.validation_commands
|
|
65
73
|
: ['echo "No validation commands configured"'];
|
|
66
74
|
return `#!/usr/bin/env bash
|
|
67
75
|
set -euo pipefail
|
|
@@ -79,8 +87,20 @@ import { readFileSync } from 'node:fs';
|
|
|
79
87
|
import { isAbsolute, relative, resolve } from 'node:path';
|
|
80
88
|
|
|
81
89
|
const contract = JSON.parse(readFileSync(new URL('./harness.json', import.meta.url), 'utf8'));
|
|
82
|
-
|
|
83
|
-
|
|
90
|
+
|
|
91
|
+
function resolve_cwd() {
|
|
92
|
+
const contract_cwd = resolve(contract.policy.cwd);
|
|
93
|
+
const candidate = process.env.HARNESS_CWD ? resolve(process.env.HARNESS_CWD) : contract_cwd;
|
|
94
|
+
try {
|
|
95
|
+
const common = (cwd) => execFileSync('git', ['-C', cwd, 'rev-parse', '--path-format=absolute', '--git-common-dir'], { encoding: 'utf8' }).trim();
|
|
96
|
+
return common(candidate) === common(contract_cwd) ? candidate : contract_cwd;
|
|
97
|
+
} catch {
|
|
98
|
+
return contract_cwd;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const cwd = resolve_cwd();
|
|
103
|
+
const baseline = new Set(contract.policy.baseline_changed_files || []);
|
|
84
104
|
|
|
85
105
|
function changed_paths() {
|
|
86
106
|
const status = execFileSync('git', ['-C', cwd, 'status', '--short', '--untracked-files=all'], { encoding: 'utf8' })
|
|
@@ -128,9 +148,9 @@ for (const path of changed_paths()) {
|
|
|
128
148
|
if (baseline.has(path)) continue;
|
|
129
149
|
const absolute_path = resolve(cwd, path);
|
|
130
150
|
if (absolute_path !== cwd && !absolute_path.startsWith(cwd + '/')) violations.push(path + ' is outside cwd');
|
|
131
|
-
if (contract.forbidden_paths.some((pattern) => pattern_matches(pattern, path))) violations.push(path + ' matches forbidden_paths');
|
|
132
|
-
if (!contract.allow_test_changes && is_test_path(path)) violations.push(path + ' is a test change but allow_test_changes is false');
|
|
133
|
-
if (!contract.allowed_paths.some((pattern) => pattern_matches(pattern, path))) violations.push(path + ' is outside allowed_paths');
|
|
151
|
+
if (contract.policy.forbidden_paths.some((pattern) => pattern_matches(pattern, path))) violations.push(path + ' matches forbidden_paths');
|
|
152
|
+
if (!contract.scaffold.allow_test_changes && is_test_path(path)) violations.push(path + ' is a test change but allow_test_changes is false');
|
|
153
|
+
if (!contract.scaffold.allowed_paths.some((pattern) => pattern_matches(pattern, path))) violations.push(path + ' is outside allowed_paths');
|
|
134
154
|
}
|
|
135
155
|
|
|
136
156
|
if (violations.length) {
|
|
@@ -144,14 +164,25 @@ console.log('Harness guard passed');
|
|
|
144
164
|
export function build_outcome_script() {
|
|
145
165
|
return `import { execFileSync } from 'node:child_process';
|
|
146
166
|
import { readFileSync, writeFileSync } from 'node:fs';
|
|
147
|
-
import { dirname, join } from 'node:path';
|
|
167
|
+
import { dirname, join, resolve } from 'node:path';
|
|
148
168
|
import { fileURLToPath } from 'node:url';
|
|
149
169
|
|
|
150
170
|
const harness_dir = dirname(fileURLToPath(import.meta.url));
|
|
151
171
|
const contract = JSON.parse(readFileSync(join(harness_dir, 'harness.json'), 'utf8'));
|
|
152
172
|
const status = JSON.parse(readFileSync(join(harness_dir, 'status.json'), 'utf8'));
|
|
153
|
-
|
|
154
|
-
const
|
|
173
|
+
function resolve_cwd() {
|
|
174
|
+
const contract_cwd = resolve(contract.policy.cwd);
|
|
175
|
+
const candidate = process.env.HARNESS_CWD ? resolve(process.env.HARNESS_CWD) : contract_cwd;
|
|
176
|
+
try {
|
|
177
|
+
const common = (cwd) => execFileSync('git', ['-C', cwd, 'rev-parse', '--path-format=absolute', '--git-common-dir'], { encoding: 'utf8' }).trim();
|
|
178
|
+
return common(candidate) === common(contract_cwd) ? candidate : contract_cwd;
|
|
179
|
+
} catch {
|
|
180
|
+
return contract_cwd;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
const cwd = resolve_cwd();
|
|
185
|
+
const baseline = new Set(contract.policy.baseline_changed_files || []);
|
|
155
186
|
|
|
156
187
|
function git_lines(args) {
|
|
157
188
|
try {
|
|
@@ -176,14 +207,14 @@ const outcome = {
|
|
|
176
207
|
id: contract.id,
|
|
177
208
|
status: status.status,
|
|
178
209
|
phase: status.phase,
|
|
179
|
-
task: contract.task,
|
|
180
|
-
cwd: contract.cwd,
|
|
210
|
+
task: contract.scaffold.task,
|
|
211
|
+
cwd: contract.policy.cwd,
|
|
181
212
|
execution_cwd: cwd,
|
|
182
213
|
generated_at: new Date().toISOString(),
|
|
183
214
|
changed_files: unique([...status_files, ...diff_files, ...logged_files]).filter((file) => !baseline.has(file)).sort(),
|
|
184
|
-
baseline_changed_files: contract.baseline_changed_files || [],
|
|
215
|
+
baseline_changed_files: contract.policy.baseline_changed_files || [],
|
|
185
216
|
validation: {
|
|
186
|
-
commands: contract.validation_commands,
|
|
217
|
+
commands: contract.scaffold.validation_commands,
|
|
187
218
|
evidence: status.log
|
|
188
219
|
.filter((entry) => entry.evidence)
|
|
189
220
|
.map((entry) => ({ timestamp: entry.timestamp, phase: entry.phase, evidence: entry.evidence })),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renderers.js","sourceRoot":"","sources":["../../src/runtime/renderers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"renderers.js","sourceRoot":"","sources":["../../src/runtime/renderers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,UAAU,qBAAqB,CACpC,QAAyB;IAEzB,OAAO,6BAA6B,QAAQ,CAAC,EAAE;;;;;;mBAM7B,QAAQ,CAAC,MAAM,CAAC,GAAG;0BACZ,QAAQ,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM;;;;qBAItF,QAAQ,CAAC,QAAQ,CAAC,OAAO;;wBAEtB,QAAQ,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM;0BAC/E,QAAQ,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;gBAC7D,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM;;;;;;;;;;;CAW5G,CAAC;AACF,CAAC;AAED,MAAM,UAAU,mBAAmB,CAClC,QAAyB;IAEzB,OAAO,mBAAmB,QAAQ,CAAC,EAAE;;;;EAIpC,QAAQ,CAAC,QAAQ,CAAC,IAAI;;;;;;;;;;;;;;;EAetB,QAAQ,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;CACzE,CAAC;AACF,CAAC;AAED,SAAS,wBAAwB,CAAC,QAAyB;IAC1D,OAAO,gBAAgB,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;;;;;;;;;;;;;8BAa1B,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,qBAAqB,CACpC,QAAyB;IAEzB,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAAC,MAAM;QAC5D,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,mBAAmB;QACvC,CAAC,CAAC,CAAC,0CAA0C,CAAC,CAAC;IAChD,OAAO;;EAEN,wBAAwB,CAAC,QAAQ,CAAC;;EAElC,QAAQ;SACR,GAAG,CACH,CACC,OAAO,EACP,KAAK,EACJ,EAAE,CAAC,UAAU,KAAK,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC;WACrE,WAAW,CAAC,OAAO,CAAC,EAAE,CAC/B;SACA,IAAI,CAAC,IAAI,CAAC;CACX,CAAC;AACF,CAAC;AAED,MAAM,UAAU,kBAAkB;IACjC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6EP,CAAC;AACF,CAAC;AAED,MAAM,UAAU,oBAAoB;IACnC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+EP,CAAC;AACF,CAAC;AAED,MAAM,UAAU,mBAAmB,CAClC,QAAyB,EACzB,UAAkB,EAClB,mBAA2B;IAE3B,OAAO;;EAEN,wBAAwB,CAAC,QAAQ,CAAC;;;;;;;;;OAS7B,WAAW,CAAC,mBAAmB,CAAC;;;OAGhC,WAAW,CAAC,UAAU,CAAC;;;OAGvB,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC;CAC9B,CAAC;AACF,CAAC"}
|
package/dist/schema.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Type, type Static } from 'typebox';
|
|
2
|
-
export declare const HARNESS_VERSION =
|
|
2
|
+
export declare const HARNESS_VERSION = 2;
|
|
3
3
|
export declare const HARNESS_CUSTOM_TYPE = "pi-harness-state";
|
|
4
4
|
export declare const DEFAULT_FORBIDDEN_COMMANDS: string[];
|
|
5
5
|
export declare const thinking_levels_schema: Type.TUnion<[Type.TLiteral<"off">, Type.TLiteral<"minimal">, Type.TLiteral<"low">, Type.TLiteral<"medium">, Type.TLiteral<"high">, Type.TLiteral<"xhigh">]>;
|
|
@@ -31,19 +31,39 @@ export declare const harness_update_params_schema: Type.TObject<{
|
|
|
31
31
|
changed_files: Type.TOptional<Type.TArray<Type.TString>>;
|
|
32
32
|
}>;
|
|
33
33
|
export type HarnessUpdateParams = Static<typeof harness_update_params_schema>;
|
|
34
|
+
export declare const harness_amend_params_schema: Type.TObject<{
|
|
35
|
+
harness_dir: Type.TString;
|
|
36
|
+
reason: Type.TString;
|
|
37
|
+
requested_by: Type.TOptional<Type.TUnion<[Type.TLiteral<"user">, Type.TLiteral<"planner">]>>;
|
|
38
|
+
task: Type.TOptional<Type.TString>;
|
|
39
|
+
allowed_paths: Type.TOptional<Type.TArray<Type.TString>>;
|
|
40
|
+
validation_commands: Type.TOptional<Type.TArray<Type.TString>>;
|
|
41
|
+
allow_test_changes: Type.TOptional<Type.TBoolean>;
|
|
42
|
+
escalation_rules: Type.TOptional<Type.TArray<Type.TString>>;
|
|
43
|
+
planner_model: Type.TOptional<Type.TString>;
|
|
44
|
+
planner_thinking: Type.TOptional<Type.TUnion<[Type.TLiteral<"off">, Type.TLiteral<"minimal">, Type.TLiteral<"low">, Type.TLiteral<"medium">, Type.TLiteral<"high">, Type.TLiteral<"xhigh">]>>;
|
|
45
|
+
executor_model: Type.TOptional<Type.TString>;
|
|
46
|
+
executor_thinking: Type.TOptional<Type.TUnion<[Type.TLiteral<"off">, Type.TLiteral<"minimal">, Type.TLiteral<"low">, Type.TLiteral<"medium">, Type.TLiteral<"high">, Type.TLiteral<"xhigh">]>>;
|
|
47
|
+
reviewer_model: Type.TOptional<Type.TString>;
|
|
48
|
+
reviewer_thinking: Type.TOptional<Type.TUnion<[Type.TLiteral<"off">, Type.TLiteral<"minimal">, Type.TLiteral<"low">, Type.TLiteral<"medium">, Type.TLiteral<"high">, Type.TLiteral<"xhigh">]>>;
|
|
49
|
+
}>;
|
|
50
|
+
export type HarnessAmendParams = Static<typeof harness_amend_params_schema>;
|
|
34
51
|
export declare const harness_read_params_schema: Type.TObject<{
|
|
35
52
|
harness_dir: Type.TString;
|
|
36
53
|
}>;
|
|
37
54
|
export type HarnessReadParams = Static<typeof harness_read_params_schema>;
|
|
38
55
|
export type HarnessStatus = 'created' | 'running' | 'reviewing' | 'completed' | 'failed';
|
|
39
56
|
export type HarnessThinking = Static<typeof thinking_levels_schema>;
|
|
40
|
-
export interface
|
|
41
|
-
version: typeof HARNESS_VERSION;
|
|
42
|
-
id: string;
|
|
43
|
-
task: string;
|
|
57
|
+
export interface HarnessPolicy {
|
|
44
58
|
cwd: string;
|
|
45
|
-
|
|
46
|
-
|
|
59
|
+
forbidden_paths: string[];
|
|
60
|
+
allowed_tools: string[];
|
|
61
|
+
forbidden_commands: string[];
|
|
62
|
+
baseline_changed_files: string[];
|
|
63
|
+
}
|
|
64
|
+
export interface HarnessScaffold {
|
|
65
|
+
version: number;
|
|
66
|
+
task: string;
|
|
47
67
|
planner: {
|
|
48
68
|
model?: string;
|
|
49
69
|
thinking?: HarnessThinking;
|
|
@@ -57,13 +77,26 @@ export interface HarnessContract {
|
|
|
57
77
|
thinking?: HarnessThinking;
|
|
58
78
|
};
|
|
59
79
|
allowed_paths: string[];
|
|
60
|
-
forbidden_paths: string[];
|
|
61
|
-
allowed_tools: string[];
|
|
62
80
|
validation_commands: string[];
|
|
63
|
-
forbidden_commands: string[];
|
|
64
81
|
allow_test_changes: boolean;
|
|
65
82
|
escalation_rules: string[];
|
|
66
|
-
|
|
83
|
+
}
|
|
84
|
+
export interface HarnessAmendment {
|
|
85
|
+
timestamp: string;
|
|
86
|
+
requested_by: 'user' | 'planner';
|
|
87
|
+
reason: string;
|
|
88
|
+
from_version: number;
|
|
89
|
+
to_version: number;
|
|
90
|
+
changes: string[];
|
|
91
|
+
}
|
|
92
|
+
export interface HarnessContract {
|
|
93
|
+
version: typeof HARNESS_VERSION;
|
|
94
|
+
id: string;
|
|
95
|
+
created_at: string;
|
|
96
|
+
status: HarnessStatus;
|
|
97
|
+
policy: HarnessPolicy;
|
|
98
|
+
scaffold: HarnessScaffold;
|
|
99
|
+
amendments: HarnessAmendment[];
|
|
67
100
|
}
|
|
68
101
|
export interface HarnessLogEntry {
|
|
69
102
|
timestamp: string;
|
package/dist/schema.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Type } from 'typebox';
|
|
2
|
-
export const HARNESS_VERSION =
|
|
2
|
+
export const HARNESS_VERSION = 2;
|
|
3
3
|
export const HARNESS_CUSTOM_TYPE = 'pi-harness-state';
|
|
4
4
|
export const DEFAULT_FORBIDDEN_COMMANDS = [
|
|
5
5
|
'rm -rf .git',
|
|
@@ -54,6 +54,26 @@ export const harness_update_params_schema = Type.Object({
|
|
|
54
54
|
remaining_risks: Type.Optional(Type.Array(Type.String())),
|
|
55
55
|
changed_files: Type.Optional(Type.Array(Type.String())),
|
|
56
56
|
});
|
|
57
|
+
export const harness_amend_params_schema = Type.Object({
|
|
58
|
+
harness_dir: Type.String({
|
|
59
|
+
description: 'Harness directory in /tmp',
|
|
60
|
+
}),
|
|
61
|
+
reason: Type.String({
|
|
62
|
+
description: 'Why the scaffold must change',
|
|
63
|
+
}),
|
|
64
|
+
requested_by: Type.Optional(Type.Union([Type.Literal('user'), Type.Literal('planner')])),
|
|
65
|
+
task: Type.Optional(Type.String()),
|
|
66
|
+
allowed_paths: Type.Optional(Type.Array(Type.String())),
|
|
67
|
+
validation_commands: Type.Optional(Type.Array(Type.String())),
|
|
68
|
+
allow_test_changes: Type.Optional(Type.Boolean()),
|
|
69
|
+
escalation_rules: Type.Optional(Type.Array(Type.String())),
|
|
70
|
+
planner_model: Type.Optional(Type.String()),
|
|
71
|
+
planner_thinking: Type.Optional(thinking_levels_schema),
|
|
72
|
+
executor_model: Type.Optional(Type.String()),
|
|
73
|
+
executor_thinking: Type.Optional(thinking_levels_schema),
|
|
74
|
+
reviewer_model: Type.Optional(Type.String()),
|
|
75
|
+
reviewer_thinking: Type.Optional(thinking_levels_schema),
|
|
76
|
+
});
|
|
57
77
|
export const harness_read_params_schema = Type.Object({
|
|
58
78
|
harness_dir: Type.String({
|
|
59
79
|
description: 'Harness directory in /tmp',
|
package/dist/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spences10/pi-harness",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.5",
|
|
4
4
|
"description": "Ephemeral task harness runtime for my-pi agent workflows",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agent",
|
|
@@ -36,11 +36,11 @@
|
|
|
36
36
|
"access": "public"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
|
-
"@earendil-works/pi-coding-agent": "0.80.
|
|
39
|
+
"@earendil-works/pi-coding-agent": "0.80.6",
|
|
40
40
|
"@types/node": "^25.8.0",
|
|
41
41
|
"typebox": "^1.1.38",
|
|
42
|
-
"typescript": "^
|
|
43
|
-
"vitest": "4.1.
|
|
42
|
+
"typescript": "^7.0.2",
|
|
43
|
+
"vitest": "4.1.10"
|
|
44
44
|
},
|
|
45
45
|
"peerDependencies": {
|
|
46
46
|
"@earendil-works/pi-coding-agent": "*",
|
|
@@ -20,15 +20,25 @@ after context gathering.
|
|
|
20
20
|
or evidence the harness is grounded in.
|
|
21
21
|
3. Challenge assumptions: identify uncertainties and whether the
|
|
22
22
|
executor may decide or must escalate.
|
|
23
|
-
4. Define
|
|
24
|
-
|
|
23
|
+
4. Define both layers: the outer policy contains workspace/verifier
|
|
24
|
+
protections; the inner scaffold contains task scope, validation,
|
|
25
|
+
test strategy, and model roles.
|
|
25
26
|
5. Call `harness_create` with the task and contract fields.
|
|
26
27
|
6. If the `team` tool is available, create or reuse a team and call
|
|
27
28
|
`task_create` with the harness directory in the description.
|
|
28
29
|
7. Read back the created harness path and report how to run it with
|
|
29
30
|
`/harness run <dir>`.
|
|
30
31
|
|
|
31
|
-
##
|
|
32
|
+
## Policy and Scaffold Guidance
|
|
33
|
+
|
|
34
|
+
- Outer policy fields (`cwd`, forbidden paths/commands, tool surface,
|
|
35
|
+
dirty baseline) are runtime-owned and cannot be weakened by
|
|
36
|
+
`harness_amend`.
|
|
37
|
+
- Inner scaffold fields (task, allowed paths, validation, test policy,
|
|
38
|
+
model roles, escalation rules) are versioned and amendable when user
|
|
39
|
+
direction or evidence changes.
|
|
40
|
+
- The scaffold is subordinate to system, developer, and current user
|
|
41
|
+
instructions.
|
|
32
42
|
|
|
33
43
|
- Keep `allowed_paths` narrow. Use `.` only when the task genuinely
|
|
34
44
|
spans the repo.
|
|
@@ -8,8 +8,10 @@ compatibility:
|
|
|
8
8
|
|
|
9
9
|
# Execute Harness
|
|
10
10
|
|
|
11
|
-
Run the task through an existing my-pi harness.
|
|
12
|
-
|
|
11
|
+
Run the task through an existing my-pi harness. Its outer policy is
|
|
12
|
+
the runtime trust boundary; its versioned inner scaffold is an
|
|
13
|
+
amendable execution plan subordinate to system, developer, and current
|
|
14
|
+
user instructions.
|
|
13
15
|
|
|
14
16
|
## Workflow
|
|
15
17
|
|
|
@@ -30,8 +32,10 @@ execution contract.
|
|
|
30
32
|
evidence, and report changed files plus risks. If using a worktree,
|
|
31
33
|
set `HARNESS_CWD` to that worktree for validation and review.
|
|
32
34
|
6. Recover any remaining source-of-truth context needed to act safely.
|
|
33
|
-
7. Execute surgically inside `allowed_paths
|
|
34
|
-
|
|
35
|
+
7. Execute surgically inside `scaffold.allowed_paths`. If user
|
|
36
|
+
direction or source evidence changes legitimate scope or strategy,
|
|
37
|
+
use `harness_amend` and record the reason rather than treating the
|
|
38
|
+
scaffold as immutable.
|
|
35
39
|
8. Record decisions, phase changes, and validation evidence with
|
|
36
40
|
`harness_update`, including team status and remaining risks when
|
|
37
41
|
known.
|
|
@@ -47,10 +51,12 @@ execution contract.
|
|
|
47
51
|
|
|
48
52
|
## Rules
|
|
49
53
|
|
|
50
|
-
- Do not edit outside the
|
|
54
|
+
- Do not bypass the outer policy. Do not edit outside the active
|
|
55
|
+
scaffold without first recording an authorized amendment.
|
|
51
56
|
- Do not weaken tests, fake outputs, or bypass validation.
|
|
52
|
-
-
|
|
53
|
-
|
|
57
|
+
- An enforcement block is a harness mismatch, not a platform-policy
|
|
58
|
+
refusal. Amend the scaffold when authorized; otherwise ask the user.
|
|
59
|
+
Mark failed only when the task cannot proceed.
|
|
54
60
|
- If validation fails after one focused fix attempt, escalate.
|
|
55
61
|
- If team mode is unavailable, run the harness directly in the current
|
|
56
62
|
session and say that no teammate was spawned.
|
|
@@ -8,7 +8,8 @@ compatibility:
|
|
|
8
8
|
|
|
9
9
|
# Review Harness
|
|
10
10
|
|
|
11
|
-
Review
|
|
11
|
+
Review completed or failed work against the immutable outer policy and
|
|
12
|
+
the complete versioned scaffold/amendment history.
|
|
12
13
|
|
|
13
14
|
## Workflow
|
|
14
15
|
|
|
@@ -17,15 +18,18 @@ Review the completed or failed work against the harness contract.
|
|
|
17
18
|
`logs/events.jsonl` if present.
|
|
18
19
|
2. Run or inspect `<harness_dir>/review.sh`.
|
|
19
20
|
3. Inspect git diff and changed files.
|
|
20
|
-
4. Compare changes against `
|
|
21
|
-
test
|
|
21
|
+
4. Compare changes against `policy.forbidden_paths`, the active
|
|
22
|
+
`scaffold.allowed_paths`, test policy, escalation rules, and all
|
|
23
|
+
recorded amendments.
|
|
22
24
|
5. Verify validation evidence from `status.json`, logs, and command
|
|
23
25
|
output.
|
|
24
26
|
6. Decide: pass, needs executor fix, or escalate to planner/user.
|
|
25
27
|
|
|
26
28
|
## Review Checks
|
|
27
29
|
|
|
28
|
-
- Did work stay inside
|
|
30
|
+
- Did work stay inside the outer policy and active scaffold?
|
|
31
|
+
- Were scaffold changes authorized, versioned, and honestly recorded?
|
|
32
|
+
- Did any amendment attempt to weaken the outer trust boundary?
|
|
29
33
|
- Were tests changed when `allow_test_changes` is false?
|
|
30
34
|
- Were validators weakened, deleted, skipped, or bypassed?
|
|
31
35
|
- Were outputs faked or hardcoded to satisfy checks?
|