razzou-harness 0.1.0 → 0.1.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.
Files changed (71) hide show
  1. package/README.md +10 -3
  2. package/dist/agents/claude-code.js +0 -1
  3. package/dist/checks/runner.js +0 -1
  4. package/dist/ci/harness-ci.js +0 -1
  5. package/dist/cli.js +0 -1
  6. package/dist/daemon/architects.js +0 -1
  7. package/dist/daemon/channel.js +0 -1
  8. package/dist/daemon/design.js +0 -1
  9. package/dist/daemon/items.js +0 -1
  10. package/dist/daemon/main.js +0 -1
  11. package/dist/daemon/manager.js +0 -1
  12. package/dist/daemon/orchestrator.js +0 -1
  13. package/dist/daemon/refs.js +0 -1
  14. package/dist/daemon/requests.js +0 -1
  15. package/dist/daemon/task.js +0 -1
  16. package/dist/daemon/web-read.js +0 -1
  17. package/dist/dashboard/server.js +0 -1
  18. package/dist/dashboard/terminals.js +0 -1
  19. package/dist/design/schemas.js +0 -1
  20. package/dist/git/repo.js +0 -1
  21. package/dist/github/app.js +0 -1
  22. package/dist/github/forge.js +0 -1
  23. package/dist/github/setup.js +0 -1
  24. package/dist/roles.js +0 -1
  25. package/dist/sandbox/allowlist.js +0 -1
  26. package/dist/sandbox/driver.js +0 -1
  27. package/dist/sandbox/openshell.js +0 -1
  28. package/dist/sandbox/policy.js +0 -1
  29. package/dist/setup/doctor.js +0 -1
  30. package/dist/setup/init.js +0 -1
  31. package/dist/setup/probe.js +0 -1
  32. package/dist/setup/recover.js +0 -1
  33. package/dist/state/events.js +0 -1
  34. package/dist/state/state.js +0 -1
  35. package/dist/util.js +0 -1
  36. package/dist/web/THIRD-PARTY-LICENSES.md +372 -0
  37. package/package.json +5 -4
  38. package/dist/agents/claude-code.js.map +0 -1
  39. package/dist/checks/runner.js.map +0 -1
  40. package/dist/ci/harness-ci.js.map +0 -1
  41. package/dist/cli.js.map +0 -1
  42. package/dist/daemon/architects.js.map +0 -1
  43. package/dist/daemon/channel.js.map +0 -1
  44. package/dist/daemon/design.js.map +0 -1
  45. package/dist/daemon/items.js.map +0 -1
  46. package/dist/daemon/main.js.map +0 -1
  47. package/dist/daemon/manager.js.map +0 -1
  48. package/dist/daemon/orchestrator.js.map +0 -1
  49. package/dist/daemon/refs.js.map +0 -1
  50. package/dist/daemon/requests.js.map +0 -1
  51. package/dist/daemon/task.js.map +0 -1
  52. package/dist/daemon/web-read.js.map +0 -1
  53. package/dist/dashboard/server.js.map +0 -1
  54. package/dist/dashboard/terminals.js.map +0 -1
  55. package/dist/design/schemas.js.map +0 -1
  56. package/dist/git/repo.js.map +0 -1
  57. package/dist/github/app.js.map +0 -1
  58. package/dist/github/forge.js.map +0 -1
  59. package/dist/github/setup.js.map +0 -1
  60. package/dist/roles.js.map +0 -1
  61. package/dist/sandbox/allowlist.js.map +0 -1
  62. package/dist/sandbox/driver.js.map +0 -1
  63. package/dist/sandbox/openshell.js.map +0 -1
  64. package/dist/sandbox/policy.js.map +0 -1
  65. package/dist/setup/doctor.js.map +0 -1
  66. package/dist/setup/init.js.map +0 -1
  67. package/dist/setup/probe.js.map +0 -1
  68. package/dist/setup/recover.js.map +0 -1
  69. package/dist/state/events.js.map +0 -1
  70. package/dist/state/state.js.map +0 -1
  71. package/dist/util.js.map +0 -1
package/README.md CHANGED
@@ -1,8 +1,12 @@
1
1
  # razzou-harness
2
2
 
3
- Builds software one module, plan and feature at a time, with Claude Code agents in
4
- [OpenShell](https://github.com/NVIDIA/OpenShell) sandboxes. A small daemon runs the loop;
5
- agents do the work, and fresh sandboxes check it. It follows Anthropic's
3
+ **Your AI dev team, with you in charge.**
4
+
5
+ You describe a module. An Architect designs it with you, Developers build it one feature
6
+ at a time, and a Manager reviews each one. Every agent works in its own
7
+ [OpenShell](https://github.com/NVIDIA/OpenShell) sandbox with no credentials, every
8
+ feature is checked in a fresh one, and nothing reaches `main` until you merge its pull
9
+ request. A small daemon runs the loop, following Anthropic's
6
10
  [Effective harnesses for long-running agents](https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents).
7
11
 
8
12
  ## How it works
@@ -58,6 +62,9 @@ harness doctor --probe # everything an agent must not do, tried
58
62
  harness up # the daemon, and the dashboard
59
63
  ```
60
64
 
65
+ The command is also installed as `razzou-harness`, for machines where another `harness`,
66
+ such as the Harness.io CLI, comes first on the PATH.
67
+
61
68
  `harness init` writes the harness's files into the repository, never over existing
62
69
  ones, and prints the setup checklist:
63
70
  1. Docker, and OpenShell with a running gateway.
@@ -183,4 +183,3 @@ function toUsage(usage, cost) {
183
183
  ...(typeof cost === 'number' ? { costUsd: cost } : {}),
184
184
  };
185
185
  }
186
- //# sourceMappingURL=claude-code.js.map
@@ -66,4 +66,3 @@ export async function initEnvironment(driver, sandbox, workDir) {
66
66
  ]);
67
67
  return result;
68
68
  }
69
- //# sourceMappingURL=runner.js.map
@@ -360,4 +360,3 @@ if (process.argv[1] && realpathSync(process.argv[1]) === import.meta.filename) {
360
360
  process.exit(1);
361
361
  });
362
362
  }
363
- //# sourceMappingURL=harness-ci.js.map
package/dist/cli.js CHANGED
@@ -285,4 +285,3 @@ main().catch((error) => {
285
285
  console.error(error.message);
286
286
  process.exitCode = 1;
287
287
  });
288
- //# sourceMappingURL=cli.js.map
@@ -287,4 +287,3 @@ function welcome(module) {
287
287
  'Read them, README.md and ARCHITECTURE.md, then greet the owner in two lines and wait.',
288
288
  ].join('\n'), 2000);
289
289
  }
290
- //# sourceMappingURL=architects.js.map
@@ -81,4 +81,3 @@ export class AgentChannel {
81
81
  this.options.onRequest(request);
82
82
  }
83
83
  }
84
- //# sourceMappingURL=channel.js.map
@@ -122,4 +122,3 @@ async function prBody(o, module, design, summary, suspect, base, lock) {
122
122
  `<!-- harness: design ${module.module} -->`,
123
123
  ].join('\n');
124
124
  }
125
- //# sourceMappingURL=design.js.map
@@ -230,4 +230,3 @@ function checkLines(results, withOutput = false) {
230
230
  });
231
231
  }
232
232
  const short = (sha) => (sha ? sha.slice(0, 8) : '?');
233
- //# sourceMappingURL=items.js.map
@@ -94,4 +94,3 @@ export async function runDaemon(projectDir, options = {}) {
94
94
  function refText(ref) {
95
95
  return [ref.module, ref.plan, ref.feature].filter(Boolean).join('/') + (ref.attempt ? ` #${ref.attempt}` : '');
96
96
  }
97
- //# sourceMappingURL=main.js.map
@@ -262,4 +262,3 @@ export class Managers {
262
262
  };
263
263
  }
264
264
  }
265
- //# sourceMappingURL=manager.js.map
@@ -1128,4 +1128,3 @@ function commitMessage(ref, feature, attempt, results, fix) {
1128
1128
  '',
1129
1129
  ].join('\n');
1130
1130
  }
1131
- //# sourceMappingURL=orchestrator.js.map
@@ -23,4 +23,3 @@ export function probeScript(exitFile, pidFile) {
23
23
  export function waitForFile(file) {
24
24
  return `for i in $(seq 1 100); do test -s ${sh(file)} && exit 0; sleep 0.1; done; echo 'nothing in ${file} after 10 s' >&2; exit 1`;
25
25
  }
26
- //# sourceMappingURL=refs.js.map
@@ -312,4 +312,3 @@ function architectState(o, id) {
312
312
  openEscalations: module.escalations.filter((e) => e.decision === undefined).map((e) => ({ id: e.id, question: clip(e.question, 400), feature: e.feature })),
313
313
  }, null, 2);
314
314
  }
315
- //# sourceMappingURL=requests.js.map
@@ -39,4 +39,3 @@ export function buildTask(input) {
39
39
  lines.push('', '## When you finish', '', 'Commit your work with a meaningful message. Uncommitted changes are discarded.', 'End with your structured report: `done` with a short summary, or `blocked` with a finding when you cannot finish.', 'If a decision is open that the task and the repository do not settle, ask the Manager with `ask_manager` before you guess.');
40
40
  return `${lines.join('\n')}\n`;
41
41
  }
42
- //# sourceMappingURL=task.js.map
@@ -248,4 +248,3 @@ function decodeEntities(text) {
248
248
  return ENTITIES[code.toLowerCase()] ?? entity;
249
249
  });
250
250
  }
251
- //# sourceMappingURL=web-read.js.map
@@ -358,4 +358,3 @@ function sendJson(res, data) {
358
358
  res.writeHead(200, { 'content-type': 'application/json' });
359
359
  res.end(JSON.stringify(data));
360
360
  }
361
- //# sourceMappingURL=server.js.map
@@ -143,4 +143,3 @@ function kill(pty) {
143
143
  // gone already
144
144
  }
145
145
  }
146
- //# sourceMappingURL=terminals.js.map
@@ -271,4 +271,3 @@ function parse(schema, text, path) {
271
271
  throw new Error(`${path}:\n${z.prettifyError(result.error)}`);
272
272
  return result.data;
273
273
  }
274
- //# sourceMappingURL=schemas.js.map
package/dist/git/repo.js CHANGED
@@ -180,4 +180,3 @@ const ISOLATED = { ...process.env, GIT_CONFIG_GLOBAL: '/dev/null', GIT_CONFIG_NO
180
180
  function lines(text) {
181
181
  return text.split('\n').filter((line) => line !== '');
182
182
  }
183
- //# sourceMappingURL=repo.js.map
@@ -121,4 +121,3 @@ export class GitHubError extends Error {
121
121
  this.status = status;
122
122
  }
123
123
  }
124
- //# sourceMappingURL=app.js.map
@@ -88,4 +88,3 @@ export class GitHubForge {
88
88
  }
89
89
  }
90
90
  }
91
- //# sourceMappingURL=forge.js.map
@@ -186,4 +186,3 @@ export async function applyRepositoryRules(repo, requiredChecks) {
186
186
  done.push(`ruleset "harness: main": PRs only, one approval from a code owner, no force push or deletion, and these checks green: ${requiredChecks.join(', ')}`);
187
187
  return done;
188
188
  }
189
- //# sourceMappingURL=setup.js.map
package/dist/roles.js CHANGED
@@ -111,4 +111,3 @@ export function toolsManifest(role) {
111
111
  return { name: tool.name, description: tool.description, inputSchema, waitSec: tool.waitSec, onTimeout: tool.onTimeout };
112
112
  }));
113
113
  }
114
- //# sourceMappingURL=roles.js.map
@@ -30,4 +30,3 @@ export function checkHost(host) {
30
30
  if (labels.slice(1).some((label) => label.includes('**')))
31
31
  throw new Error(`host ${host}: ** may only be the whole first label`);
32
32
  }
33
- //# sourceMappingURL=allowlist.js.map
@@ -1,2 +1 @@
1
1
  export {};
2
- //# sourceMappingURL=driver.js.map
@@ -68,4 +68,3 @@ export class OpenShellDriver {
68
68
  await run(this.bin, ['sandbox', 'delete', name]);
69
69
  }
70
70
  }
71
- //# sourceMappingURL=openshell.js.map
@@ -91,4 +91,3 @@ function gitEndpoint(rule) {
91
91
  ],
92
92
  };
93
93
  }
94
- //# sourceMappingURL=policy.js.map
@@ -319,4 +319,3 @@ const warn = (name, detail, fix) => ({ status: 'warn', name, detail, ...(fix ? {
319
319
  const fail = (name, detail, fix) => ({ status: 'fail', name, detail, ...(fix ? { fix } : {}) });
320
320
  const firstLine = (text) => (text ?? '').trim().split('\n')[0]?.slice(0, 200) ?? '';
321
321
  const lastLine = (text) => (text ?? '').trim().split('\n').at(-1)?.slice(0, 200) ?? '';
322
- //# sourceMappingURL=doctor.js.map
@@ -85,4 +85,3 @@ function appBot() {
85
85
  const { slug } = JSON.parse(readFileSync(file, 'utf8'));
86
86
  return slug ? `${slug}[bot]` : undefined;
87
87
  }
88
- //# sourceMappingURL=init.js.map
@@ -111,4 +111,3 @@ export function stateLocation(text) {
111
111
  function lastLine(text) {
112
112
  return (text.split('\n').filter((line) => line.trim() !== '').at(-1) ?? '').slice(0, 160);
113
113
  }
114
- //# sourceMappingURL=probe.js.map
@@ -91,4 +91,3 @@ function progress(text) {
91
91
  }
92
92
  return { features, gates };
93
93
  }
94
- //# sourceMappingURL=recover.js.map
@@ -69,4 +69,3 @@ export class EventStore {
69
69
  return `e${time}${counter}`;
70
70
  }
71
71
  }
72
- //# sourceMappingURL=events.js.map
@@ -505,4 +505,3 @@ function attemptOf(state, ref) {
505
505
  throw new Error(`no attempt ${ref.attempt} for ${featureKey(ref)}`);
506
506
  return attempt;
507
507
  }
508
- //# sourceMappingURL=state.js.map
package/dist/util.js CHANGED
@@ -52,4 +52,3 @@ export function tail(text, chars = 2000) {
52
52
  return text.length <= chars ? text : `…${text.slice(-chars)}`;
53
53
  }
54
54
  export const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
55
- //# sourceMappingURL=util.js.map
@@ -0,0 +1,372 @@
1
+ # Licenses
2
+
3
+ The app bundles dependencies which contain the following licenses:
4
+
5
+ ## @xterm/addon-fit - 0.11.0 (MIT)
6
+
7
+ Copyright (c) 2019, The xterm.js authors (https://github.com/xtermjs/xterm.js)
8
+
9
+ Permission is hereby granted, free of charge, to any person obtaining a copy
10
+ of this software and associated documentation files (the "Software"), to deal
11
+ in the Software without restriction, including without limitation the rights
12
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13
+ copies of the Software, and to permit persons to whom the Software is
14
+ furnished to do so, subject to the following conditions:
15
+
16
+ The above copyright notice and this permission notice shall be included in
17
+ all copies or substantial portions of the Software.
18
+
19
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25
+ THE SOFTWARE.
26
+
27
+ ## @xterm/xterm - 6.0.0 (MIT)
28
+
29
+ Copyright (c) 2017-2019, The xterm.js authors (https://github.com/xtermjs/xterm.js)
30
+ Copyright (c) 2014-2016, SourceLair Private Company (https://www.sourcelair.com)
31
+ Copyright (c) 2012-2013, Christopher Jeffrey (https://github.com/chjj/)
32
+
33
+ Permission is hereby granted, free of charge, to any person obtaining a copy
34
+ of this software and associated documentation files (the "Software"), to deal
35
+ in the Software without restriction, including without limitation the rights
36
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
37
+ copies of the Software, and to permit persons to whom the Software is
38
+ furnished to do so, subject to the following conditions:
39
+
40
+ The above copyright notice and this permission notice shall be included in
41
+ all copies or substantial portions of the Software.
42
+
43
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
44
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
45
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
46
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
47
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
48
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
49
+ THE SOFTWARE.
50
+
51
+ ## dompurify - 3.4.16 ((MPL-2.0 OR Apache-2.0))
52
+
53
+ Apache License
54
+ Version 2.0, January 2004
55
+ http://www.apache.org/licenses/
56
+
57
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
58
+
59
+ 1. Definitions.
60
+
61
+ "License" shall mean the terms and conditions for use, reproduction,
62
+ and distribution as defined by Sections 1 through 9 of this document.
63
+
64
+ "Licensor" shall mean the copyright owner or entity authorized by
65
+ the copyright owner that is granting the License.
66
+
67
+ "Legal Entity" shall mean the union of the acting entity and all
68
+ other entities that control, are controlled by, or are under common
69
+ control with that entity. For the purposes of this definition,
70
+ "control" means (i) the power, direct or indirect, to cause the
71
+ direction or management of such entity, whether by contract or
72
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
73
+ outstanding shares, or (iii) beneficial ownership of such entity.
74
+
75
+ "You" (or "Your") shall mean an individual or Legal Entity
76
+ exercising permissions granted by this License.
77
+
78
+ "Source" form shall mean the preferred form for making modifications,
79
+ including but not limited to software source code, documentation
80
+ source, and configuration files.
81
+
82
+ "Object" form shall mean any form resulting from mechanical
83
+ transformation or translation of a Source form, including but
84
+ not limited to compiled object code, generated documentation,
85
+ and conversions to other media types.
86
+
87
+ "Work" shall mean the work of authorship, whether in Source or
88
+ Object form, made available under the License, as indicated by a
89
+ copyright notice that is included in or attached to the work
90
+ (an example is provided in the Appendix below).
91
+
92
+ "Derivative Works" shall mean any work, whether in Source or Object
93
+ form, that is based on (or derived from) the Work and for which the
94
+ editorial revisions, annotations, elaborations, or other modifications
95
+ represent, as a whole, an original work of authorship. For the purposes
96
+ of this License, Derivative Works shall not include works that remain
97
+ separable from, or merely link (or bind by name) to the interfaces of,
98
+ the Work and Derivative Works thereof.
99
+
100
+ "Contribution" shall mean any work of authorship, including
101
+ the original version of the Work and any modifications or additions
102
+ to that Work or Derivative Works thereof, that is intentionally
103
+ submitted to Licensor for inclusion in the Work by the copyright owner
104
+ or by an individual or Legal Entity authorized to submit on behalf of
105
+ the copyright owner. For the purposes of this definition, "submitted"
106
+ means any form of electronic, verbal, or written communication sent
107
+ to the Licensor or its representatives, including but not limited to
108
+ communication on electronic mailing lists, source code control systems,
109
+ and issue tracking systems that are managed by, or on behalf of, the
110
+ Licensor for the purpose of discussing and improving the Work, but
111
+ excluding communication that is conspicuously marked or otherwise
112
+ designated in writing by the copyright owner as "Not a Contribution."
113
+
114
+ "Contributor" shall mean Licensor and any individual or Legal Entity
115
+ on behalf of whom a Contribution has been received by Licensor and
116
+ subsequently incorporated within the Work.
117
+
118
+ 2. Grant of Copyright License. Subject to the terms and conditions of
119
+ this License, each Contributor hereby grants to You a perpetual,
120
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
121
+ copyright license to reproduce, prepare Derivative Works of,
122
+ publicly display, publicly perform, sublicense, and distribute the
123
+ Work and such Derivative Works in Source or Object form.
124
+
125
+ 3. Grant of Patent License. Subject to the terms and conditions of
126
+ this License, each Contributor hereby grants to You a perpetual,
127
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
128
+ (except as stated in this section) patent license to make, have made,
129
+ use, offer to sell, sell, import, and otherwise transfer the Work,
130
+ where such license applies only to those patent claims licensable
131
+ by such Contributor that are necessarily infringed by their
132
+ Contribution(s) alone or by combination of their Contribution(s)
133
+ with the Work to which such Contribution(s) was submitted. If You
134
+ institute patent litigation against any entity (including a
135
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
136
+ or a Contribution incorporated within the Work constitutes direct
137
+ or contributory patent infringement, then any patent licenses
138
+ granted to You under this License for that Work shall terminate
139
+ as of the date such litigation is filed.
140
+
141
+ 4. Redistribution. You may reproduce and distribute copies of the
142
+ Work or Derivative Works thereof in any medium, with or without
143
+ modifications, and in Source or Object form, provided that You
144
+ meet the following conditions:
145
+
146
+ (a) You must give any other recipients of the Work or
147
+ Derivative Works a copy of this License; and
148
+
149
+ (b) You must cause any modified files to carry prominent notices
150
+ stating that You changed the files; and
151
+
152
+ (c) You must retain, in the Source form of any Derivative Works
153
+ that You distribute, all copyright, patent, trademark, and
154
+ attribution notices from the Source form of the Work,
155
+ excluding those notices that do not pertain to any part of
156
+ the Derivative Works; and
157
+
158
+ (d) If the Work includes a "NOTICE" text file as part of its
159
+ distribution, then any Derivative Works that You distribute must
160
+ include a readable copy of the attribution notices contained
161
+ within such NOTICE file, excluding those notices that do not
162
+ pertain to any part of the Derivative Works, in at least one
163
+ of the following places: within a NOTICE text file distributed
164
+ as part of the Derivative Works; within the Source form or
165
+ documentation, if provided along with the Derivative Works; or,
166
+ within a display generated by the Derivative Works, if and
167
+ wherever such third-party notices normally appear. The contents
168
+ of the NOTICE file are for informational purposes only and
169
+ do not modify the License. You may add Your own attribution
170
+ notices within Derivative Works that You distribute, alongside
171
+ or as an addendum to the NOTICE text from the Work, provided
172
+ that such additional attribution notices cannot be construed
173
+ as modifying the License.
174
+
175
+ You may add Your own copyright statement to Your modifications and
176
+ may provide additional or different license terms and conditions
177
+ for use, reproduction, or distribution of Your modifications, or
178
+ for any such Derivative Works as a whole, provided Your use,
179
+ reproduction, and distribution of the Work otherwise complies with
180
+ the conditions stated in this License.
181
+
182
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
183
+ any Contribution intentionally submitted for inclusion in the Work
184
+ by You to the Licensor shall be under the terms and conditions of
185
+ this License, without any additional terms or conditions.
186
+ Notwithstanding the above, nothing herein shall supersede or modify
187
+ the terms of any separate license agreement you may have executed
188
+ with Licensor regarding such Contributions.
189
+
190
+ 6. Trademarks. This License does not grant permission to use the trade
191
+ names, trademarks, service marks, or product names of the Licensor,
192
+ except as required for reasonable and customary use in describing the
193
+ origin of the Work and reproducing the content of the NOTICE file.
194
+
195
+ 7. Disclaimer of Warranty. Unless required by applicable law or
196
+ agreed to in writing, Licensor provides the Work (and each
197
+ Contributor provides its Contributions) on an "AS IS" BASIS,
198
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
199
+ implied, including, without limitation, any warranties or conditions
200
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
201
+ PARTICULAR PURPOSE. You are solely responsible for determining the
202
+ appropriateness of using or redistributing the Work and assume any
203
+ risks associated with Your exercise of permissions under this License.
204
+
205
+ 8. Limitation of Liability. In no event and under no legal theory,
206
+ whether in tort (including negligence), contract, or otherwise,
207
+ unless required by applicable law (such as deliberate and grossly
208
+ negligent acts) or agreed to in writing, shall any Contributor be
209
+ liable to You for damages, including any direct, indirect, special,
210
+ incidental, or consequential damages of any character arising as a
211
+ result of this License or out of the use or inability to use the
212
+ Work (including but not limited to damages for loss of goodwill,
213
+ work stoppage, computer failure or malfunction, or any and all
214
+ other commercial damages or losses), even if such Contributor
215
+ has been advised of the possibility of such damages.
216
+
217
+ 9. Accepting Warranty or Additional Liability. While redistributing
218
+ the Work or Derivative Works thereof, You may choose to offer,
219
+ and charge a fee for, acceptance of support, warranty, indemnity,
220
+ or other liability obligations and/or rights consistent with this
221
+ License. However, in accepting such obligations, You may act only
222
+ on Your own behalf and on Your sole responsibility, not on behalf
223
+ of any other Contributor, and only if You agree to indemnify,
224
+ defend, and hold each Contributor harmless for any liability
225
+ incurred by, or claims asserted against, such Contributor by reason
226
+ of your accepting any such warranty or additional liability.
227
+
228
+ END OF TERMS AND CONDITIONS
229
+
230
+ APPENDIX: How to apply the Apache License to your work.
231
+
232
+ To apply the Apache License to your work, attach the following
233
+ boilerplate notice, with the fields enclosed by brackets "[]"
234
+ replaced with your own identifying information. (Don't include
235
+ the brackets!) The text should be enclosed in the appropriate
236
+ comment syntax for the file format. We also recommend that a
237
+ file or class name and description of purpose be included on the
238
+ same "printed page" as the copyright notice for easier
239
+ identification within third-party archives.
240
+
241
+ Copyright [yyyy] [name of copyright owner]
242
+
243
+ Licensed under the Apache License, Version 2.0 (the "License");
244
+ you may not use this file except in compliance with the License.
245
+ You may obtain a copy of the License at
246
+
247
+ http://www.apache.org/licenses/LICENSE-2.0
248
+
249
+ Unless required by applicable law or agreed to in writing, software
250
+ distributed under the License is distributed on an "AS IS" BASIS,
251
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
252
+ See the License for the specific language governing permissions and
253
+ limitations under the License.
254
+
255
+ ## marked - 18.1.0 (MIT)
256
+
257
+ # License information
258
+
259
+ ## Contribution License Agreement
260
+
261
+ If you contribute code to this project, you are implicitly allowing your code
262
+ to be distributed under the MIT license. You are also implicitly verifying that
263
+ all code is your original work. `</legalese>`
264
+
265
+ ## Marked
266
+
267
+ Copyright (c) 2018+, MarkedJS (https://github.com/markedjs/)
268
+ Copyright (c) 2011-2018, Christopher Jeffrey (https://github.com/chjj/)
269
+
270
+ Permission is hereby granted, free of charge, to any person obtaining a copy
271
+ of this software and associated documentation files (the "Software"), to deal
272
+ in the Software without restriction, including without limitation the rights
273
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
274
+ copies of the Software, and to permit persons to whom the Software is
275
+ furnished to do so, subject to the following conditions:
276
+
277
+ The above copyright notice and this permission notice shall be included in
278
+ all copies or substantial portions of the Software.
279
+
280
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
281
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
282
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
283
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
284
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
285
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
286
+ THE SOFTWARE.
287
+
288
+ ## Markdown
289
+
290
+ Copyright © 2004, John Gruber
291
+ http://daringfireball.net/
292
+ All rights reserved.
293
+
294
+ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
295
+
296
+ * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
297
+ * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
298
+ * Neither the name “Markdown” nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
299
+
300
+ This software is provided by the copyright holders and contributors “as is” and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall the copyright owner or contributors be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this software, even if advised of the possibility of such damage.
301
+
302
+ ## react-dom - 19.3.0 (MIT)
303
+
304
+ MIT License
305
+
306
+ Copyright (c) Meta Platforms, Inc. and affiliates.
307
+
308
+ Permission is hereby granted, free of charge, to any person obtaining a copy
309
+ of this software and associated documentation files (the "Software"), to deal
310
+ in the Software without restriction, including without limitation the rights
311
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
312
+ copies of the Software, and to permit persons to whom the Software is
313
+ furnished to do so, subject to the following conditions:
314
+
315
+ The above copyright notice and this permission notice shall be included in all
316
+ copies or substantial portions of the Software.
317
+
318
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
319
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
320
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
321
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
322
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
323
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
324
+ SOFTWARE.
325
+
326
+ ## react - 19.3.0 (MIT)
327
+
328
+ MIT License
329
+
330
+ Copyright (c) Meta Platforms, Inc. and affiliates.
331
+
332
+ Permission is hereby granted, free of charge, to any person obtaining a copy
333
+ of this software and associated documentation files (the "Software"), to deal
334
+ in the Software without restriction, including without limitation the rights
335
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
336
+ copies of the Software, and to permit persons to whom the Software is
337
+ furnished to do so, subject to the following conditions:
338
+
339
+ The above copyright notice and this permission notice shall be included in all
340
+ copies or substantial portions of the Software.
341
+
342
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
343
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
344
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
345
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
346
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
347
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
348
+ SOFTWARE.
349
+
350
+ ## scheduler - 0.28.0 (MIT)
351
+
352
+ MIT License
353
+
354
+ Copyright (c) Meta Platforms, Inc. and affiliates.
355
+
356
+ Permission is hereby granted, free of charge, to any person obtaining a copy
357
+ of this software and associated documentation files (the "Software"), to deal
358
+ in the Software without restriction, including without limitation the rights
359
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
360
+ copies of the Software, and to permit persons to whom the Software is
361
+ furnished to do so, subject to the following conditions:
362
+
363
+ The above copyright notice and this permission notice shall be included in all
364
+ copies or substantial portions of the Software.
365
+
366
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
367
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
368
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
369
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
370
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
371
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
372
+ SOFTWARE.
package/package.json CHANGED
@@ -1,14 +1,15 @@
1
1
  {
2
2
  "name": "razzou-harness",
3
- "version": "0.1.0",
4
- "description": "Builds software one module, plan and feature at a time, with Claude Code agents in OpenShell sandboxes.",
3
+ "version": "0.1.1",
4
+ "description": "Your AI dev team, with you in charge: sandboxed Claude Code agents design, build and review your project, and you merge.",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "engines": {
8
8
  "node": ">=24"
9
9
  },
10
10
  "bin": {
11
- "harness": "dist/cli.js"
11
+ "harness": "dist/cli.js",
12
+ "razzou-harness": "dist/cli.js"
12
13
  },
13
14
  "files": [
14
15
  "dist",
@@ -20,7 +21,7 @@
20
21
  "src/ci/harness-ci.ts"
21
22
  ],
22
23
  "scripts": {
23
- "build": "tsc -p tsconfig.build.json && vite build --config dashboard/vite.config.ts",
24
+ "build": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\" && tsc -p tsconfig.build.json && vite build --config dashboard/vite.config.ts",
24
25
  "prepack": "npm run build",
25
26
  "typecheck": "tsc --noEmit && tsc --noEmit -p dashboard",
26
27
  "test": "node --test --test-reporter=spec \"test/**/*.test.ts\"",