atavi 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ARCHITECTURE.md +167 -0
- package/CHANGELOG.md +20 -0
- package/CONTRIBUTING.md +42 -0
- package/HOSTS.md +177 -0
- package/LICENSE +22 -0
- package/README.md +232 -0
- package/TESTING.md +68 -0
- package/bin/atavi.js +10 -0
- package/package.json +51 -0
- package/protocol/ATAVI.md +149 -0
- package/protocol/agents/critic.md +19 -0
- package/protocol/agents/experimentalist.md +30 -0
- package/protocol/agents/scout.md +34 -0
- package/protocol/agents/synthesist.md +19 -0
- package/protocol/agents/theorist.md +31 -0
- package/src/cli.js +98 -0
- package/src/commands/doctor.js +39 -0
- package/src/commands/init.js +26 -0
- package/src/commands/memory-export.js +22 -0
- package/src/commands/memory-import.js +31 -0
- package/src/commands/migrate.js +68 -0
- package/src/commands/path.js +6 -0
- package/src/commands/resume-check.js +57 -0
- package/src/commands/validate.js +40 -0
- package/src/lib/config.js +62 -0
- package/src/lib/filesystem.js +27 -0
- package/src/lib/memory.js +75 -0
- package/src/lib/protocol-manifest.js +318 -0
- package/src/lib/status.js +111 -0
- package/templates/cpr.md +12 -0
- package/templates/output-report.md +39 -0
- package/templates/pod.md +22 -0
- package/templates/research-brief.md +32 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
const ALLOWED_PHASES = new Set([
|
|
2
|
+
"not_started",
|
|
3
|
+
"independent_work",
|
|
4
|
+
"cross_pollination",
|
|
5
|
+
"synthesis",
|
|
6
|
+
"decision_gate",
|
|
7
|
+
"completed"
|
|
8
|
+
]);
|
|
9
|
+
|
|
10
|
+
const ALLOWED_RUN_STATUSES = new Set([
|
|
11
|
+
"initialized",
|
|
12
|
+
"in_progress",
|
|
13
|
+
"blocked",
|
|
14
|
+
"completed"
|
|
15
|
+
]);
|
|
16
|
+
|
|
17
|
+
function parseLine(line) {
|
|
18
|
+
const separatorIndex = line.indexOf(":");
|
|
19
|
+
if (separatorIndex === -1) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const key = line.slice(0, separatorIndex).trim();
|
|
24
|
+
const value = line.slice(separatorIndex + 1).trim();
|
|
25
|
+
if (!key) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
return [key, value];
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function parseStatusFile(contents) {
|
|
33
|
+
const fields = {};
|
|
34
|
+
|
|
35
|
+
for (const rawLine of contents.split(/\r?\n/)) {
|
|
36
|
+
const line = rawLine.trim();
|
|
37
|
+
if (!line || line.startsWith("#")) {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const parsed = parseLine(line);
|
|
42
|
+
if (!parsed) {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
const [key, value] = parsed;
|
|
47
|
+
fields[key] = value;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return fields;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function validateStatus(fields) {
|
|
54
|
+
const errors = [];
|
|
55
|
+
|
|
56
|
+
const requiredFields = [
|
|
57
|
+
"run_status",
|
|
58
|
+
"current_pass",
|
|
59
|
+
"current_phase",
|
|
60
|
+
"convergence_score",
|
|
61
|
+
"blocking_concerns",
|
|
62
|
+
"token_estimate",
|
|
63
|
+
"last_updated"
|
|
64
|
+
];
|
|
65
|
+
|
|
66
|
+
for (const field of requiredFields) {
|
|
67
|
+
if (!(field in fields) || fields[field].length === 0) {
|
|
68
|
+
errors.push(`${field} is required`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
if ("run_status" in fields && !ALLOWED_RUN_STATUSES.has(fields.run_status)) {
|
|
73
|
+
errors.push(`run_status must be one of: ${Array.from(ALLOWED_RUN_STATUSES).join(", ")}`);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
if ("current_pass" in fields && !/^\d+$/.test(fields.current_pass)) {
|
|
77
|
+
errors.push("current_pass must be a non-negative integer");
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if ("current_phase" in fields && !ALLOWED_PHASES.has(fields.current_phase)) {
|
|
81
|
+
errors.push(`current_phase must be one of: ${Array.from(ALLOWED_PHASES).join(", ")}`);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if ("convergence_score" in fields) {
|
|
85
|
+
const value = fields.convergence_score;
|
|
86
|
+
if (value !== "n/a") {
|
|
87
|
+
const parsed = Number(value);
|
|
88
|
+
if (!Number.isFinite(parsed) || parsed < 0 || parsed > 1) {
|
|
89
|
+
errors.push("convergence_score must be n/a or a number between 0 and 1");
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
if (fields.run_status === "completed" && fields.current_phase !== "completed") {
|
|
95
|
+
errors.push("run_status completed requires current_phase completed");
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (fields.current_phase === "completed" && fields.run_status !== "completed") {
|
|
99
|
+
errors.push("current_phase completed requires run_status completed");
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
if (fields.run_status === "initialized" && fields.current_pass !== "0") {
|
|
103
|
+
errors.push("run_status initialized requires current_pass 0");
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (fields.current_phase === "not_started" && fields.current_pass !== "0") {
|
|
107
|
+
errors.push("current_phase not_started requires current_pass 0");
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
return errors;
|
|
111
|
+
}
|
package/templates/cpr.md
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# ATAVI Research Refinement Report
|
|
2
|
+
|
|
3
|
+
## Completion Summary
|
|
4
|
+
|
|
5
|
+
- Mode:
|
|
6
|
+
- Thesis:
|
|
7
|
+
- Passes completed:
|
|
8
|
+
- Convergence:
|
|
9
|
+
- Experiments proposed:
|
|
10
|
+
- Experiments killed:
|
|
11
|
+
- Experiments surviving:
|
|
12
|
+
- Priority actions:
|
|
13
|
+
- Unresolved decisions:
|
|
14
|
+
- Memory updated:
|
|
15
|
+
|
|
16
|
+
## Executive Summary
|
|
17
|
+
|
|
18
|
+
Summarize the run in 200-400 words.
|
|
19
|
+
|
|
20
|
+
## Recommended Experiments
|
|
21
|
+
|
|
22
|
+
Rank surviving experiments by information gain.
|
|
23
|
+
|
|
24
|
+
## Rejected Experiments
|
|
25
|
+
|
|
26
|
+
Document the kill log with explicit rejection reasons.
|
|
27
|
+
|
|
28
|
+
## Claim Registry
|
|
29
|
+
|
|
30
|
+
Record final claim states and linked evidence.
|
|
31
|
+
|
|
32
|
+
## Prior Art Registry
|
|
33
|
+
|
|
34
|
+
Record citations, summaries, tags, and overlap assessments.
|
|
35
|
+
|
|
36
|
+
## Process Log
|
|
37
|
+
|
|
38
|
+
Log every pass, CPR exchange, synthesis, convergence score, and decision gate.
|
|
39
|
+
|
package/templates/pod.md
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# Pass Output Document
|
|
2
|
+
|
|
3
|
+
## Status Summary
|
|
4
|
+
|
|
5
|
+
What changed since the last pass?
|
|
6
|
+
|
|
7
|
+
## Active Items
|
|
8
|
+
|
|
9
|
+
List active claims, experiments, or search findings.
|
|
10
|
+
|
|
11
|
+
## Killed Items
|
|
12
|
+
|
|
13
|
+
List removed items with full reasoning.
|
|
14
|
+
|
|
15
|
+
## Requests To Others
|
|
16
|
+
|
|
17
|
+
Tag target agent, urgency, and required response.
|
|
18
|
+
|
|
19
|
+
## Confidence Scores
|
|
20
|
+
|
|
21
|
+
Give a confidence score and justification for each active item.
|
|
22
|
+
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Research Brief
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
- Mode:
|
|
6
|
+
- Thesis:
|
|
7
|
+
- Domain:
|
|
8
|
+
- Context sources:
|
|
9
|
+
|
|
10
|
+
## Constraints
|
|
11
|
+
|
|
12
|
+
- Budget:
|
|
13
|
+
- Hardware:
|
|
14
|
+
- Timeline:
|
|
15
|
+
- Compliance:
|
|
16
|
+
|
|
17
|
+
## Novelty Sources
|
|
18
|
+
|
|
19
|
+
- Primary:
|
|
20
|
+
- Secondary:
|
|
21
|
+
|
|
22
|
+
## Agent Selection
|
|
23
|
+
|
|
24
|
+
- Base team:
|
|
25
|
+
- Optional agents:
|
|
26
|
+
- Rationale:
|
|
27
|
+
|
|
28
|
+
## Approval
|
|
29
|
+
|
|
30
|
+
- Researcher confirmed:
|
|
31
|
+
- Override notes:
|
|
32
|
+
|