@kolisachint/hoocode-agent 0.1.2 → 0.1.4
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/CHANGELOG.md +8 -0
- package/dist/cli/args.d.ts.map +1 -1
- package/dist/cli/args.js +1 -0
- package/dist/cli/args.js.map +1 -1
- package/dist/core/model-resolver.d.ts.map +1 -1
- package/dist/core/model-resolver.js +1 -0
- package/dist/core/model-resolver.js.map +1 -1
- package/dist/core/provider-display-names.d.ts.map +1 -1
- package/dist/core/provider-display-names.js +1 -0
- package/dist/core/provider-display-names.js.map +1 -1
- package/dist/extensions/core/hoo-core.d.ts +23 -1
- package/dist/extensions/core/hoo-core.d.ts.map +1 -1
- package/dist/extensions/core/hoo-core.js +48 -5
- package/dist/extensions/core/hoo-core.js.map +1 -1
- package/dist/utils/plan/parser.d.ts +42 -0
- package/dist/utils/plan/parser.d.ts.map +1 -0
- package/dist/utils/plan/parser.js +184 -0
- package/dist/utils/plan/parser.js.map +1 -0
- package/docs/providers.md +3 -1
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +4 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +4 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +4 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +4 -1
- package/package.json +4 -4
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan parser module for hierarchical phase/stage/step structure.
|
|
3
|
+
* Parses .hoocode/plan.md files with completion tracking.
|
|
4
|
+
*/
|
|
5
|
+
export type Status = "pending" | "in-progress" | "success" | "failed" | "skipped";
|
|
6
|
+
export interface ChecklistItem {
|
|
7
|
+
text: string;
|
|
8
|
+
completed: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface Step {
|
|
11
|
+
id: string;
|
|
12
|
+
title: string;
|
|
13
|
+
status: Status;
|
|
14
|
+
checklist: ChecklistItem[];
|
|
15
|
+
evidence?: string;
|
|
16
|
+
completedAt?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface Stage {
|
|
19
|
+
id: string;
|
|
20
|
+
title: string;
|
|
21
|
+
steps: Step[];
|
|
22
|
+
}
|
|
23
|
+
export interface Phase {
|
|
24
|
+
id: string;
|
|
25
|
+
title: string;
|
|
26
|
+
stages: Stage[];
|
|
27
|
+
}
|
|
28
|
+
export interface ParsedPlan {
|
|
29
|
+
phases: Phase[];
|
|
30
|
+
}
|
|
31
|
+
export declare function parsePlan(content: string): ParsedPlan;
|
|
32
|
+
export declare function findNextPendingStep(plan: ParsedPlan): Step | null;
|
|
33
|
+
export declare function getStepById(plan: ParsedPlan, stepId: string): Step | null;
|
|
34
|
+
export declare function getCompletionStats(plan: ParsedPlan): {
|
|
35
|
+
total: number;
|
|
36
|
+
completed: number;
|
|
37
|
+
pending: number;
|
|
38
|
+
inProgress: number;
|
|
39
|
+
failed: number;
|
|
40
|
+
skipped: number;
|
|
41
|
+
};
|
|
42
|
+
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/utils/plan/parser.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,MAAM,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;AAElF,MAAM,WAAW,aAAa;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,IAAI;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,KAAK;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,IAAI,EAAE,CAAC;CACd;AAED,MAAM,WAAW,KAAK;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,KAAK,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IAC1B,MAAM,EAAE,KAAK,EAAE,CAAC;CAChB;AAyBD,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,UAAU,CAiGrD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,GAAG,IAAI,CAwBjE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAWzE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG;IACrD,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CAChB,CAoCA","sourcesContent":["/**\n * Plan parser module for hierarchical phase/stage/step structure.\n * Parses .hoocode/plan.md files with completion tracking.\n */\n\nexport type Status = \"pending\" | \"in-progress\" | \"success\" | \"failed\" | \"skipped\";\n\nexport interface ChecklistItem {\n\ttext: string;\n\tcompleted: boolean;\n}\n\nexport interface Step {\n\tid: string;\n\ttitle: string;\n\tstatus: Status;\n\tchecklist: ChecklistItem[];\n\tevidence?: string;\n\tcompletedAt?: string;\n}\n\nexport interface Stage {\n\tid: string;\n\ttitle: string;\n\tsteps: Step[];\n}\n\nexport interface Phase {\n\tid: string;\n\ttitle: string;\n\tstages: Stage[];\n}\n\nexport interface ParsedPlan {\n\tphases: Phase[];\n}\n\nconst PHASE_REGEX = /^##\\s+Phase\\s+(\\d+):\\s+(.+)$/i;\nconst STAGE_REGEX = /^###\\s+Stage\\s+(\\d+\\.\\d+):\\s+(.+)$/i;\nconst STEP_REGEX = /^-\\s+\\[([ xX])\\]\\s+Step\\s+(\\d+\\.\\d+\\.\\d+):\\s+(.+)$/i;\nconst STATUS_REGEX = /^\\s+-\\s+Status:\\s*(\\S+)/i;\nconst CHECKLIST_REGEX = /^\\s+-\\s+\\[([ xX])\\]\\s+(.+)$/i;\nconst EVIDENCE_REGEX = /^\\s+-\\s+Evidence:\\s*(.+)$/i;\nconst COMPLETED_REGEX = /^\\s+-\\s+Completed:\\s*(.+)$/i;\n\nfunction parseStatus(status: string): Status {\n\tswitch (status.toLowerCase()) {\n\t\tcase \"in-progress\":\n\t\t\treturn \"in-progress\";\n\t\tcase \"success\":\n\t\t\treturn \"success\";\n\t\tcase \"failed\":\n\t\t\treturn \"failed\";\n\t\tcase \"skipped\":\n\t\t\treturn \"skipped\";\n\t\tdefault:\n\t\t\treturn \"pending\";\n\t}\n}\n\nexport function parsePlan(content: string): ParsedPlan {\n\tconst lines = content.split(\"\\n\");\n\tconst plan: ParsedPlan = { phases: [] };\n\n\tlet currentPhase: Phase | null = null;\n\tlet currentStage: Stage | null = null;\n\tlet currentStep: Step | null = null;\n\tlet inChecklist = false;\n\n\tfor (const line of lines) {\n\t\t// Check for phase header\n\t\tconst phaseMatch = line.match(PHASE_REGEX);\n\t\tif (phaseMatch) {\n\t\t\tcurrentPhase = {\n\t\t\t\tid: phaseMatch[1],\n\t\t\t\ttitle: phaseMatch[2].trim(),\n\t\t\t\tstages: [],\n\t\t\t};\n\t\t\tplan.phases.push(currentPhase);\n\t\t\tcurrentStage = null;\n\t\t\tcurrentStep = null;\n\t\t\tinChecklist = false;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Check for stage header\n\t\tconst stageMatch = line.match(STAGE_REGEX);\n\t\tif (stageMatch && currentPhase) {\n\t\t\tcurrentStage = {\n\t\t\t\tid: stageMatch[1],\n\t\t\t\ttitle: stageMatch[2].trim(),\n\t\t\t\tsteps: [],\n\t\t\t};\n\t\t\tcurrentPhase.stages.push(currentStage);\n\t\t\tcurrentStep = null;\n\t\t\tinChecklist = false;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Check for step header\n\t\tconst stepMatch = line.match(STEP_REGEX);\n\t\tif (stepMatch && currentStage) {\n\t\t\tcurrentStep = {\n\t\t\t\tid: stepMatch[2],\n\t\t\t\ttitle: stepMatch[3].trim(),\n\t\t\t\tstatus: stepMatch[1].trim() !== \"\" ? \"success\" : \"pending\",\n\t\t\t\tchecklist: [],\n\t\t\t};\n\t\t\tcurrentStage.steps.push(currentStep);\n\t\t\tinChecklist = false;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// If no current step, skip further processing\n\t\tif (!currentStep) continue;\n\n\t\t// Check for status\n\t\tconst statusMatch = line.match(STATUS_REGEX);\n\t\tif (statusMatch) {\n\t\t\tcurrentStep.status = parseStatus(statusMatch[1]);\n\t\t\tinChecklist = false;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Check for completed timestamp\n\t\tconst completedMatch = line.match(COMPLETED_REGEX);\n\t\tif (completedMatch) {\n\t\t\tcurrentStep.completedAt = completedMatch[1].trim();\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Check for evidence\n\t\tconst evidenceMatch = line.match(EVIDENCE_REGEX);\n\t\tif (evidenceMatch) {\n\t\t\tcurrentStep.evidence = evidenceMatch[1].trim();\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Check for checklist start\n\t\tif (line.match(/^\\s+-\\s+Checklist:\\s*$/i)) {\n\t\t\tinChecklist = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Check for checklist items\n\t\tif (inChecklist) {\n\t\t\tconst checklistMatch = line.match(CHECKLIST_REGEX);\n\t\t\tif (checklistMatch) {\n\t\t\t\tcurrentStep.checklist.push({\n\t\t\t\t\ttext: checklistMatch[2].trim(),\n\t\t\t\t\tcompleted: checklistMatch[1].trim() !== \"\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\treturn plan;\n}\n\nexport function findNextPendingStep(plan: ParsedPlan): Step | null {\n\t// First, look for any in-progress steps (to resume after crash)\n\tfor (const phase of plan.phases) {\n\t\tfor (const stage of phase.stages) {\n\t\t\tfor (const step of stage.steps) {\n\t\t\t\tif (step.status === \"in-progress\") {\n\t\t\t\t\treturn step;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Then, look for pending steps\n\tfor (const phase of plan.phases) {\n\t\tfor (const stage of phase.stages) {\n\t\t\tfor (const step of stage.steps) {\n\t\t\t\tif (step.status === \"pending\") {\n\t\t\t\t\treturn step;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\nexport function getStepById(plan: ParsedPlan, stepId: string): Step | null {\n\tfor (const phase of plan.phases) {\n\t\tfor (const stage of phase.stages) {\n\t\t\tfor (const step of stage.steps) {\n\t\t\t\tif (step.id === stepId) {\n\t\t\t\t\treturn step;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n}\n\nexport function getCompletionStats(plan: ParsedPlan): {\n\ttotal: number;\n\tcompleted: number;\n\tpending: number;\n\tinProgress: number;\n\tfailed: number;\n\tskipped: number;\n} {\n\tconst stats = {\n\t\ttotal: 0,\n\t\tcompleted: 0,\n\t\tpending: 0,\n\t\tinProgress: 0,\n\t\tfailed: 0,\n\t\tskipped: 0,\n\t};\n\n\tfor (const phase of plan.phases) {\n\t\tfor (const stage of phase.stages) {\n\t\t\tfor (const step of stage.steps) {\n\t\t\t\tstats.total++;\n\t\t\t\tswitch (step.status) {\n\t\t\t\t\tcase \"success\":\n\t\t\t\t\t\tstats.completed++;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"pending\":\n\t\t\t\t\t\tstats.pending++;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"in-progress\":\n\t\t\t\t\t\tstats.inProgress++;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"failed\":\n\t\t\t\t\t\tstats.failed++;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"skipped\":\n\t\t\t\t\t\tstats.skipped++;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn stats;\n}\n"]}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plan parser module for hierarchical phase/stage/step structure.
|
|
3
|
+
* Parses .hoocode/plan.md files with completion tracking.
|
|
4
|
+
*/
|
|
5
|
+
const PHASE_REGEX = /^##\s+Phase\s+(\d+):\s+(.+)$/i;
|
|
6
|
+
const STAGE_REGEX = /^###\s+Stage\s+(\d+\.\d+):\s+(.+)$/i;
|
|
7
|
+
const STEP_REGEX = /^-\s+\[([ xX])\]\s+Step\s+(\d+\.\d+\.\d+):\s+(.+)$/i;
|
|
8
|
+
const STATUS_REGEX = /^\s+-\s+Status:\s*(\S+)/i;
|
|
9
|
+
const CHECKLIST_REGEX = /^\s+-\s+\[([ xX])\]\s+(.+)$/i;
|
|
10
|
+
const EVIDENCE_REGEX = /^\s+-\s+Evidence:\s*(.+)$/i;
|
|
11
|
+
const COMPLETED_REGEX = /^\s+-\s+Completed:\s*(.+)$/i;
|
|
12
|
+
function parseStatus(status) {
|
|
13
|
+
switch (status.toLowerCase()) {
|
|
14
|
+
case "in-progress":
|
|
15
|
+
return "in-progress";
|
|
16
|
+
case "success":
|
|
17
|
+
return "success";
|
|
18
|
+
case "failed":
|
|
19
|
+
return "failed";
|
|
20
|
+
case "skipped":
|
|
21
|
+
return "skipped";
|
|
22
|
+
default:
|
|
23
|
+
return "pending";
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export function parsePlan(content) {
|
|
27
|
+
const lines = content.split("\n");
|
|
28
|
+
const plan = { phases: [] };
|
|
29
|
+
let currentPhase = null;
|
|
30
|
+
let currentStage = null;
|
|
31
|
+
let currentStep = null;
|
|
32
|
+
let inChecklist = false;
|
|
33
|
+
for (const line of lines) {
|
|
34
|
+
// Check for phase header
|
|
35
|
+
const phaseMatch = line.match(PHASE_REGEX);
|
|
36
|
+
if (phaseMatch) {
|
|
37
|
+
currentPhase = {
|
|
38
|
+
id: phaseMatch[1],
|
|
39
|
+
title: phaseMatch[2].trim(),
|
|
40
|
+
stages: [],
|
|
41
|
+
};
|
|
42
|
+
plan.phases.push(currentPhase);
|
|
43
|
+
currentStage = null;
|
|
44
|
+
currentStep = null;
|
|
45
|
+
inChecklist = false;
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
// Check for stage header
|
|
49
|
+
const stageMatch = line.match(STAGE_REGEX);
|
|
50
|
+
if (stageMatch && currentPhase) {
|
|
51
|
+
currentStage = {
|
|
52
|
+
id: stageMatch[1],
|
|
53
|
+
title: stageMatch[2].trim(),
|
|
54
|
+
steps: [],
|
|
55
|
+
};
|
|
56
|
+
currentPhase.stages.push(currentStage);
|
|
57
|
+
currentStep = null;
|
|
58
|
+
inChecklist = false;
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
// Check for step header
|
|
62
|
+
const stepMatch = line.match(STEP_REGEX);
|
|
63
|
+
if (stepMatch && currentStage) {
|
|
64
|
+
currentStep = {
|
|
65
|
+
id: stepMatch[2],
|
|
66
|
+
title: stepMatch[3].trim(),
|
|
67
|
+
status: stepMatch[1].trim() !== "" ? "success" : "pending",
|
|
68
|
+
checklist: [],
|
|
69
|
+
};
|
|
70
|
+
currentStage.steps.push(currentStep);
|
|
71
|
+
inChecklist = false;
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
// If no current step, skip further processing
|
|
75
|
+
if (!currentStep)
|
|
76
|
+
continue;
|
|
77
|
+
// Check for status
|
|
78
|
+
const statusMatch = line.match(STATUS_REGEX);
|
|
79
|
+
if (statusMatch) {
|
|
80
|
+
currentStep.status = parseStatus(statusMatch[1]);
|
|
81
|
+
inChecklist = false;
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
// Check for completed timestamp
|
|
85
|
+
const completedMatch = line.match(COMPLETED_REGEX);
|
|
86
|
+
if (completedMatch) {
|
|
87
|
+
currentStep.completedAt = completedMatch[1].trim();
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
// Check for evidence
|
|
91
|
+
const evidenceMatch = line.match(EVIDENCE_REGEX);
|
|
92
|
+
if (evidenceMatch) {
|
|
93
|
+
currentStep.evidence = evidenceMatch[1].trim();
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
// Check for checklist start
|
|
97
|
+
if (line.match(/^\s+-\s+Checklist:\s*$/i)) {
|
|
98
|
+
inChecklist = true;
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
// Check for checklist items
|
|
102
|
+
if (inChecklist) {
|
|
103
|
+
const checklistMatch = line.match(CHECKLIST_REGEX);
|
|
104
|
+
if (checklistMatch) {
|
|
105
|
+
currentStep.checklist.push({
|
|
106
|
+
text: checklistMatch[2].trim(),
|
|
107
|
+
completed: checklistMatch[1].trim() !== "",
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return plan;
|
|
113
|
+
}
|
|
114
|
+
export function findNextPendingStep(plan) {
|
|
115
|
+
// First, look for any in-progress steps (to resume after crash)
|
|
116
|
+
for (const phase of plan.phases) {
|
|
117
|
+
for (const stage of phase.stages) {
|
|
118
|
+
for (const step of stage.steps) {
|
|
119
|
+
if (step.status === "in-progress") {
|
|
120
|
+
return step;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
// Then, look for pending steps
|
|
126
|
+
for (const phase of plan.phases) {
|
|
127
|
+
for (const stage of phase.stages) {
|
|
128
|
+
for (const step of stage.steps) {
|
|
129
|
+
if (step.status === "pending") {
|
|
130
|
+
return step;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
export function getStepById(plan, stepId) {
|
|
138
|
+
for (const phase of plan.phases) {
|
|
139
|
+
for (const stage of phase.stages) {
|
|
140
|
+
for (const step of stage.steps) {
|
|
141
|
+
if (step.id === stepId) {
|
|
142
|
+
return step;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
export function getCompletionStats(plan) {
|
|
150
|
+
const stats = {
|
|
151
|
+
total: 0,
|
|
152
|
+
completed: 0,
|
|
153
|
+
pending: 0,
|
|
154
|
+
inProgress: 0,
|
|
155
|
+
failed: 0,
|
|
156
|
+
skipped: 0,
|
|
157
|
+
};
|
|
158
|
+
for (const phase of plan.phases) {
|
|
159
|
+
for (const stage of phase.stages) {
|
|
160
|
+
for (const step of stage.steps) {
|
|
161
|
+
stats.total++;
|
|
162
|
+
switch (step.status) {
|
|
163
|
+
case "success":
|
|
164
|
+
stats.completed++;
|
|
165
|
+
break;
|
|
166
|
+
case "pending":
|
|
167
|
+
stats.pending++;
|
|
168
|
+
break;
|
|
169
|
+
case "in-progress":
|
|
170
|
+
stats.inProgress++;
|
|
171
|
+
break;
|
|
172
|
+
case "failed":
|
|
173
|
+
stats.failed++;
|
|
174
|
+
break;
|
|
175
|
+
case "skipped":
|
|
176
|
+
stats.skipped++;
|
|
177
|
+
break;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return stats;
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/utils/plan/parser.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Plan parser module for hierarchical phase/stage/step structure.\n * Parses .hoocode/plan.md files with completion tracking.\n */\n\nexport type Status = \"pending\" | \"in-progress\" | \"success\" | \"failed\" | \"skipped\";\n\nexport interface ChecklistItem {\n\ttext: string;\n\tcompleted: boolean;\n}\n\nexport interface Step {\n\tid: string;\n\ttitle: string;\n\tstatus: Status;\n\tchecklist: ChecklistItem[];\n\tevidence?: string;\n\tcompletedAt?: string;\n}\n\nexport interface Stage {\n\tid: string;\n\ttitle: string;\n\tsteps: Step[];\n}\n\nexport interface Phase {\n\tid: string;\n\ttitle: string;\n\tstages: Stage[];\n}\n\nexport interface ParsedPlan {\n\tphases: Phase[];\n}\n\nconst PHASE_REGEX = /^##\\s+Phase\\s+(\\d+):\\s+(.+)$/i;\nconst STAGE_REGEX = /^###\\s+Stage\\s+(\\d+\\.\\d+):\\s+(.+)$/i;\nconst STEP_REGEX = /^-\\s+\\[([ xX])\\]\\s+Step\\s+(\\d+\\.\\d+\\.\\d+):\\s+(.+)$/i;\nconst STATUS_REGEX = /^\\s+-\\s+Status:\\s*(\\S+)/i;\nconst CHECKLIST_REGEX = /^\\s+-\\s+\\[([ xX])\\]\\s+(.+)$/i;\nconst EVIDENCE_REGEX = /^\\s+-\\s+Evidence:\\s*(.+)$/i;\nconst COMPLETED_REGEX = /^\\s+-\\s+Completed:\\s*(.+)$/i;\n\nfunction parseStatus(status: string): Status {\n\tswitch (status.toLowerCase()) {\n\t\tcase \"in-progress\":\n\t\t\treturn \"in-progress\";\n\t\tcase \"success\":\n\t\t\treturn \"success\";\n\t\tcase \"failed\":\n\t\t\treturn \"failed\";\n\t\tcase \"skipped\":\n\t\t\treturn \"skipped\";\n\t\tdefault:\n\t\t\treturn \"pending\";\n\t}\n}\n\nexport function parsePlan(content: string): ParsedPlan {\n\tconst lines = content.split(\"\\n\");\n\tconst plan: ParsedPlan = { phases: [] };\n\n\tlet currentPhase: Phase | null = null;\n\tlet currentStage: Stage | null = null;\n\tlet currentStep: Step | null = null;\n\tlet inChecklist = false;\n\n\tfor (const line of lines) {\n\t\t// Check for phase header\n\t\tconst phaseMatch = line.match(PHASE_REGEX);\n\t\tif (phaseMatch) {\n\t\t\tcurrentPhase = {\n\t\t\t\tid: phaseMatch[1],\n\t\t\t\ttitle: phaseMatch[2].trim(),\n\t\t\t\tstages: [],\n\t\t\t};\n\t\t\tplan.phases.push(currentPhase);\n\t\t\tcurrentStage = null;\n\t\t\tcurrentStep = null;\n\t\t\tinChecklist = false;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Check for stage header\n\t\tconst stageMatch = line.match(STAGE_REGEX);\n\t\tif (stageMatch && currentPhase) {\n\t\t\tcurrentStage = {\n\t\t\t\tid: stageMatch[1],\n\t\t\t\ttitle: stageMatch[2].trim(),\n\t\t\t\tsteps: [],\n\t\t\t};\n\t\t\tcurrentPhase.stages.push(currentStage);\n\t\t\tcurrentStep = null;\n\t\t\tinChecklist = false;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Check for step header\n\t\tconst stepMatch = line.match(STEP_REGEX);\n\t\tif (stepMatch && currentStage) {\n\t\t\tcurrentStep = {\n\t\t\t\tid: stepMatch[2],\n\t\t\t\ttitle: stepMatch[3].trim(),\n\t\t\t\tstatus: stepMatch[1].trim() !== \"\" ? \"success\" : \"pending\",\n\t\t\t\tchecklist: [],\n\t\t\t};\n\t\t\tcurrentStage.steps.push(currentStep);\n\t\t\tinChecklist = false;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// If no current step, skip further processing\n\t\tif (!currentStep) continue;\n\n\t\t// Check for status\n\t\tconst statusMatch = line.match(STATUS_REGEX);\n\t\tif (statusMatch) {\n\t\t\tcurrentStep.status = parseStatus(statusMatch[1]);\n\t\t\tinChecklist = false;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Check for completed timestamp\n\t\tconst completedMatch = line.match(COMPLETED_REGEX);\n\t\tif (completedMatch) {\n\t\t\tcurrentStep.completedAt = completedMatch[1].trim();\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Check for evidence\n\t\tconst evidenceMatch = line.match(EVIDENCE_REGEX);\n\t\tif (evidenceMatch) {\n\t\t\tcurrentStep.evidence = evidenceMatch[1].trim();\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Check for checklist start\n\t\tif (line.match(/^\\s+-\\s+Checklist:\\s*$/i)) {\n\t\t\tinChecklist = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Check for checklist items\n\t\tif (inChecklist) {\n\t\t\tconst checklistMatch = line.match(CHECKLIST_REGEX);\n\t\t\tif (checklistMatch) {\n\t\t\t\tcurrentStep.checklist.push({\n\t\t\t\t\ttext: checklistMatch[2].trim(),\n\t\t\t\t\tcompleted: checklistMatch[1].trim() !== \"\",\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\treturn plan;\n}\n\nexport function findNextPendingStep(plan: ParsedPlan): Step | null {\n\t// First, look for any in-progress steps (to resume after crash)\n\tfor (const phase of plan.phases) {\n\t\tfor (const stage of phase.stages) {\n\t\t\tfor (const step of stage.steps) {\n\t\t\t\tif (step.status === \"in-progress\") {\n\t\t\t\t\treturn step;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Then, look for pending steps\n\tfor (const phase of plan.phases) {\n\t\tfor (const stage of phase.stages) {\n\t\t\tfor (const step of stage.steps) {\n\t\t\t\tif (step.status === \"pending\") {\n\t\t\t\t\treturn step;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\nexport function getStepById(plan: ParsedPlan, stepId: string): Step | null {\n\tfor (const phase of plan.phases) {\n\t\tfor (const stage of phase.stages) {\n\t\t\tfor (const step of stage.steps) {\n\t\t\t\tif (step.id === stepId) {\n\t\t\t\t\treturn step;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn null;\n}\n\nexport function getCompletionStats(plan: ParsedPlan): {\n\ttotal: number;\n\tcompleted: number;\n\tpending: number;\n\tinProgress: number;\n\tfailed: number;\n\tskipped: number;\n} {\n\tconst stats = {\n\t\ttotal: 0,\n\t\tcompleted: 0,\n\t\tpending: 0,\n\t\tinProgress: 0,\n\t\tfailed: 0,\n\t\tskipped: 0,\n\t};\n\n\tfor (const phase of plan.phases) {\n\t\tfor (const stage of phase.stages) {\n\t\t\tfor (const step of stage.steps) {\n\t\t\t\tstats.total++;\n\t\t\t\tswitch (step.status) {\n\t\t\t\t\tcase \"success\":\n\t\t\t\t\t\tstats.completed++;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"pending\":\n\t\t\t\t\t\tstats.pending++;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"in-progress\":\n\t\t\t\t\t\tstats.inProgress++;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"failed\":\n\t\t\t\t\t\tstats.failed++;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"skipped\":\n\t\t\t\t\t\tstats.skipped++;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn stats;\n}\n"]}
|
package/docs/providers.md
CHANGED
|
@@ -74,6 +74,7 @@ pi
|
|
|
74
74
|
| Xiaomi MiMo Token Plan (China) | `XIAOMI_TOKEN_PLAN_CN_API_KEY` | `xiaomi-token-plan-cn` |
|
|
75
75
|
| Xiaomi MiMo Token Plan (Amsterdam) | `XIAOMI_TOKEN_PLAN_AMS_API_KEY` | `xiaomi-token-plan-ams` |
|
|
76
76
|
| Xiaomi MiMo Token Plan (Singapore) | `XIAOMI_TOKEN_PLAN_SGP_API_KEY` | `xiaomi-token-plan-sgp` |
|
|
77
|
+
| NVIDIA | `NVIDIA_API_KEY` | `nvidia` |
|
|
77
78
|
|
|
78
79
|
Reference for environment variables and `auth.json` keys: [`const envMap`](https://github.com/kolisachint/hoocode/blob/main/packages/ai/src/env-api-keys.ts) in [`packages/ai/src/env-api-keys.ts`](https://github.com/kolisachint/hoocode/blob/main/packages/ai/src/env-api-keys.ts).
|
|
79
80
|
|
|
@@ -93,7 +94,8 @@ Store credentials in `~/.pi/agent/auth.json`:
|
|
|
93
94
|
"xiaomi": { "type": "api_key", "key": "..." },
|
|
94
95
|
"xiaomi-token-plan-cn": { "type": "api_key", "key": "..." },
|
|
95
96
|
"xiaomi-token-plan-ams": { "type": "api_key", "key": "..." },
|
|
96
|
-
"xiaomi-token-plan-sgp": { "type": "api_key", "key": "..." }
|
|
97
|
+
"xiaomi-token-plan-sgp": { "type": "api_key", "key": "..." },
|
|
98
|
+
"nvidia": { "type": "api_key", "key": "..." }
|
|
97
99
|
}
|
|
98
100
|
```
|
|
99
101
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-extension-custom-provider",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "pi-extension-custom-provider",
|
|
9
|
-
"version": "0.
|
|
9
|
+
"version": "0.0.2",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@anthropic-ai/sdk": "^0.52.0"
|
|
12
12
|
}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kolisachint/hoocode-extension-custom-provider-anthropic",
|
|
3
3
|
"private": true,
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.0.2",
|
|
5
5
|
"type": "module",
|
|
6
|
+
"engines": {
|
|
7
|
+
"bun": ">=1.0.0"
|
|
8
|
+
},
|
|
6
9
|
"scripts": {
|
|
7
10
|
"clean": "echo 'nothing to clean'",
|
|
8
11
|
"build": "echo 'nothing to build'",
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kolisachint/hoocode-extension-custom-provider-gitlab-duo",
|
|
3
3
|
"private": true,
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.0.2",
|
|
5
5
|
"type": "module",
|
|
6
|
+
"engines": {
|
|
7
|
+
"bun": ">=1.0.0"
|
|
8
|
+
},
|
|
6
9
|
"scripts": {
|
|
7
10
|
"clean": "echo 'nothing to clean'",
|
|
8
11
|
"build": "echo 'nothing to build'",
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-extension-sandbox",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "pi-extension-sandbox",
|
|
9
|
-
"version": "
|
|
9
|
+
"version": "0.0.2",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"@anthropic-ai/sandbox-runtime": "^0.0.26"
|
|
12
12
|
}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kolisachint/hoocode-extension-sandbox",
|
|
3
3
|
"private": true,
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "0.0.2",
|
|
5
5
|
"type": "module",
|
|
6
|
+
"engines": {
|
|
7
|
+
"bun": ">=1.0.0"
|
|
8
|
+
},
|
|
6
9
|
"scripts": {
|
|
7
10
|
"clean": "echo 'nothing to clean'",
|
|
8
11
|
"build": "echo 'nothing to build'",
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-extension-with-deps",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "pi-extension-with-deps",
|
|
9
|
-
"version": "0.
|
|
9
|
+
"version": "0.0.2",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"ms": "^2.1.3"
|
|
12
12
|
},
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kolisachint/hoocode-extension-with-deps",
|
|
3
3
|
"private": true,
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.0.2",
|
|
5
5
|
"type": "module",
|
|
6
|
+
"engines": {
|
|
7
|
+
"bun": ">=1.0.0"
|
|
8
|
+
},
|
|
6
9
|
"scripts": {
|
|
7
10
|
"clean": "echo 'nothing to clean'",
|
|
8
11
|
"build": "echo 'nothing to build'",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kolisachint/hoocode-agent",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "Coding agent CLI with read, bash, edit, write tools and session management",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"hoocodeConfig": {
|
|
@@ -42,9 +42,9 @@
|
|
|
42
42
|
"prepublishOnly": "npm run clean && npm run build"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@kolisachint/hoocode-agent-core": "^0.1.
|
|
46
|
-
"@kolisachint/hoocode-ai": "^0.1.
|
|
47
|
-
"@kolisachint/hoocode-tui": "^0.1.
|
|
45
|
+
"@kolisachint/hoocode-agent-core": "^0.1.4",
|
|
46
|
+
"@kolisachint/hoocode-ai": "^0.1.4",
|
|
47
|
+
"@kolisachint/hoocode-tui": "^0.1.4",
|
|
48
48
|
"@silvia-odwyer/photon-node": "^0.3.4",
|
|
49
49
|
"chalk": "^5.5.0",
|
|
50
50
|
"cli-highlight": "^2.1.11",
|