@rryando/arcs 3.0.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/README.md +448 -0
- package/dist/cli/arcs-orchestrate-caveman.d.ts +16 -0
- package/dist/cli/arcs-orchestrate-caveman.d.ts.map +1 -0
- package/dist/cli/arcs-orchestrate-caveman.js +109 -0
- package/dist/cli/arcs-orchestrate-caveman.js.map +1 -0
- package/dist/cli/arcs-orchestrate.d.ts +2 -0
- package/dist/cli/arcs-orchestrate.d.ts.map +1 -0
- package/dist/cli/arcs-orchestrate.js +431 -0
- package/dist/cli/arcs-orchestrate.js.map +1 -0
- package/dist/cli/arg-parser.d.ts +20 -0
- package/dist/cli/arg-parser.d.ts.map +1 -0
- package/dist/cli/arg-parser.js +216 -0
- package/dist/cli/arg-parser.js.map +1 -0
- package/dist/cli/brief-renderer.d.ts +32 -0
- package/dist/cli/brief-renderer.d.ts.map +1 -0
- package/dist/cli/brief-renderer.js +67 -0
- package/dist/cli/brief-renderer.js.map +1 -0
- package/dist/cli/bundle-installer.d.ts +77 -0
- package/dist/cli/bundle-installer.d.ts.map +1 -0
- package/dist/cli/bundle-installer.js +328 -0
- package/dist/cli/bundle-installer.js.map +1 -0
- package/dist/cli/command-registry.d.ts +52 -0
- package/dist/cli/command-registry.d.ts.map +1 -0
- package/dist/cli/command-registry.js +68 -0
- package/dist/cli/command-registry.js.map +1 -0
- package/dist/cli/commands/batch.d.ts +2 -0
- package/dist/cli/commands/batch.d.ts.map +1 -0
- package/dist/cli/commands/batch.js +307 -0
- package/dist/cli/commands/batch.js.map +1 -0
- package/dist/cli/commands/brief.d.ts +2 -0
- package/dist/cli/commands/brief.d.ts.map +1 -0
- package/dist/cli/commands/brief.js +146 -0
- package/dist/cli/commands/brief.js.map +1 -0
- package/dist/cli/commands/bundle.d.ts +2 -0
- package/dist/cli/commands/bundle.d.ts.map +1 -0
- package/dist/cli/commands/bundle.js +90 -0
- package/dist/cli/commands/bundle.js.map +1 -0
- package/dist/cli/commands/dependency.d.ts +2 -0
- package/dist/cli/commands/dependency.d.ts.map +1 -0
- package/dist/cli/commands/dependency.js +260 -0
- package/dist/cli/commands/dependency.js.map +1 -0
- package/dist/cli/commands/diagnostics.d.ts +2 -0
- package/dist/cli/commands/diagnostics.d.ts.map +1 -0
- package/dist/cli/commands/diagnostics.js +91 -0
- package/dist/cli/commands/diagnostics.js.map +1 -0
- package/dist/cli/commands/diagram.d.ts +2 -0
- package/dist/cli/commands/diagram.d.ts.map +1 -0
- package/dist/cli/commands/diagram.js +305 -0
- package/dist/cli/commands/diagram.js.map +1 -0
- package/dist/cli/commands/done.d.ts +2 -0
- package/dist/cli/commands/done.d.ts.map +1 -0
- package/dist/cli/commands/done.js +140 -0
- package/dist/cli/commands/done.js.map +1 -0
- package/dist/cli/commands/graph.d.ts +2 -0
- package/dist/cli/commands/graph.d.ts.map +1 -0
- package/dist/cli/commands/graph.js +105 -0
- package/dist/cli/commands/graph.js.map +1 -0
- package/dist/cli/commands/index.d.ts +21 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +22 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/knowledge-search.d.ts +2 -0
- package/dist/cli/commands/knowledge-search.d.ts.map +1 -0
- package/dist/cli/commands/knowledge-search.js +43 -0
- package/dist/cli/commands/knowledge-search.js.map +1 -0
- package/dist/cli/commands/knowledge.d.ts +2 -0
- package/dist/cli/commands/knowledge.d.ts.map +1 -0
- package/dist/cli/commands/knowledge.js +416 -0
- package/dist/cli/commands/knowledge.js.map +1 -0
- package/dist/cli/commands/loop.d.ts +2 -0
- package/dist/cli/commands/loop.d.ts.map +1 -0
- package/dist/cli/commands/loop.js +192 -0
- package/dist/cli/commands/loop.js.map +1 -0
- package/dist/cli/commands/maintenance.d.ts +2 -0
- package/dist/cli/commands/maintenance.d.ts.map +1 -0
- package/dist/cli/commands/maintenance.js +231 -0
- package/dist/cli/commands/maintenance.js.map +1 -0
- package/dist/cli/commands/next.d.ts +2 -0
- package/dist/cli/commands/next.d.ts.map +1 -0
- package/dist/cli/commands/next.js +116 -0
- package/dist/cli/commands/next.js.map +1 -0
- package/dist/cli/commands/plan.d.ts +2 -0
- package/dist/cli/commands/plan.d.ts.map +1 -0
- package/dist/cli/commands/plan.js +340 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/project-updates.d.ts +2 -0
- package/dist/cli/commands/project-updates.d.ts.map +1 -0
- package/dist/cli/commands/project-updates.js +243 -0
- package/dist/cli/commands/project-updates.js.map +1 -0
- package/dist/cli/commands/project.d.ts +2 -0
- package/dist/cli/commands/project.d.ts.map +1 -0
- package/dist/cli/commands/project.js +362 -0
- package/dist/cli/commands/project.js.map +1 -0
- package/dist/cli/commands/remember.d.ts +2 -0
- package/dist/cli/commands/remember.d.ts.map +1 -0
- package/dist/cli/commands/remember.js +70 -0
- package/dist/cli/commands/remember.js.map +1 -0
- package/dist/cli/commands/status.d.ts +2 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +104 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/task.d.ts +6 -0
- package/dist/cli/commands/task.d.ts.map +1 -0
- package/dist/cli/commands/task.js +361 -0
- package/dist/cli/commands/task.js.map +1 -0
- package/dist/cli/commands/utility.d.ts +9 -0
- package/dist/cli/commands/utility.d.ts.map +1 -0
- package/dist/cli/commands/utility.js +302 -0
- package/dist/cli/commands/utility.js.map +1 -0
- package/dist/cli/config.d.ts +42 -0
- package/dist/cli/config.d.ts.map +1 -0
- package/dist/cli/config.js +134 -0
- package/dist/cli/config.js.map +1 -0
- package/dist/cli/dag-commands.d.ts +7 -0
- package/dist/cli/dag-commands.d.ts.map +1 -0
- package/dist/cli/dag-commands.js +152 -0
- package/dist/cli/dag-commands.js.map +1 -0
- package/dist/cli/diagram-renderer.d.ts +26 -0
- package/dist/cli/diagram-renderer.d.ts.map +1 -0
- package/dist/cli/diagram-renderer.js +118 -0
- package/dist/cli/diagram-renderer.js.map +1 -0
- package/dist/cli/help-generator.d.ts +21 -0
- package/dist/cli/help-generator.d.ts.map +1 -0
- package/dist/cli/help-generator.js +100 -0
- package/dist/cli/help-generator.js.map +1 -0
- package/dist/cli/index.d.ts +8 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +95 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/instructions.d.ts +53 -0
- package/dist/cli/instructions.d.ts.map +1 -0
- package/dist/cli/instructions.js +219 -0
- package/dist/cli/instructions.js.map +1 -0
- package/dist/cli/lean-output.d.ts +15 -0
- package/dist/cli/lean-output.d.ts.map +1 -0
- package/dist/cli/lean-output.js +66 -0
- package/dist/cli/lean-output.js.map +1 -0
- package/dist/cli/md-renderer.d.ts +6 -0
- package/dist/cli/md-renderer.d.ts.map +1 -0
- package/dist/cli/md-renderer.js +396 -0
- package/dist/cli/md-renderer.js.map +1 -0
- package/dist/cli/output-envelope.d.ts +15 -0
- package/dist/cli/output-envelope.d.ts.map +1 -0
- package/dist/cli/output-envelope.js +61 -0
- package/dist/cli/output-envelope.js.map +1 -0
- package/dist/cli/setup.d.ts +11 -0
- package/dist/cli/setup.d.ts.map +1 -0
- package/dist/cli/setup.js +415 -0
- package/dist/cli/setup.js.map +1 -0
- package/dist/cli/status-dashboard.d.ts +5 -0
- package/dist/cli/status-dashboard.d.ts.map +1 -0
- package/dist/cli/status-dashboard.js +248 -0
- package/dist/cli/status-dashboard.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/retrieval/bm25.d.ts +23 -0
- package/dist/retrieval/bm25.d.ts.map +1 -0
- package/dist/retrieval/bm25.js +92 -0
- package/dist/retrieval/bm25.js.map +1 -0
- package/dist/retrieval/cross-project-search.d.ts +30 -0
- package/dist/retrieval/cross-project-search.d.ts.map +1 -0
- package/dist/retrieval/cross-project-search.js +109 -0
- package/dist/retrieval/cross-project-search.js.map +1 -0
- package/dist/retrieval/graph-builder.d.ts +6 -0
- package/dist/retrieval/graph-builder.d.ts.map +1 -0
- package/dist/retrieval/graph-builder.js +196 -0
- package/dist/retrieval/graph-builder.js.map +1 -0
- package/dist/retrieval/graph-cache.d.ts +15 -0
- package/dist/retrieval/graph-cache.d.ts.map +1 -0
- package/dist/retrieval/graph-cache.js +66 -0
- package/dist/retrieval/graph-cache.js.map +1 -0
- package/dist/retrieval/graph-invalidate.d.ts +18 -0
- package/dist/retrieval/graph-invalidate.d.ts.map +1 -0
- package/dist/retrieval/graph-invalidate.js +23 -0
- package/dist/retrieval/graph-invalidate.js.map +1 -0
- package/dist/retrieval/graph-retrieval.d.ts +24 -0
- package/dist/retrieval/graph-retrieval.d.ts.map +1 -0
- package/dist/retrieval/graph-retrieval.js +165 -0
- package/dist/retrieval/graph-retrieval.js.map +1 -0
- package/dist/retrieval/graph-traverse.d.ts +3 -0
- package/dist/retrieval/graph-traverse.d.ts.map +1 -0
- package/dist/retrieval/graph-traverse.js +53 -0
- package/dist/retrieval/graph-traverse.js.map +1 -0
- package/dist/retrieval/graph-types.d.ts +37 -0
- package/dist/retrieval/graph-types.d.ts.map +1 -0
- package/dist/retrieval/graph-types.js +12 -0
- package/dist/retrieval/graph-types.js.map +1 -0
- package/dist/retrieval/index-builder.d.ts +21 -0
- package/dist/retrieval/index-builder.d.ts.map +1 -0
- package/dist/retrieval/index-builder.js +94 -0
- package/dist/retrieval/index-builder.js.map +1 -0
- package/dist/retrieval/knowledge-selection.d.ts +7 -0
- package/dist/retrieval/knowledge-selection.d.ts.map +1 -0
- package/dist/retrieval/knowledge-selection.js +80 -0
- package/dist/retrieval/knowledge-selection.js.map +1 -0
- package/dist/retrieval/task-scoped.d.ts +23 -0
- package/dist/retrieval/task-scoped.d.ts.map +1 -0
- package/dist/retrieval/task-scoped.js +51 -0
- package/dist/retrieval/task-scoped.js.map +1 -0
- package/dist/utils/content-assembly.d.ts +44 -0
- package/dist/utils/content-assembly.d.ts.map +1 -0
- package/dist/utils/content-assembly.js +101 -0
- package/dist/utils/content-assembly.js.map +1 -0
- package/dist/utils/dag.d.ts +28 -0
- package/dist/utils/dag.d.ts.map +1 -0
- package/dist/utils/dag.js +68 -0
- package/dist/utils/dag.js.map +1 -0
- package/dist/utils/diagram-generator.d.ts +17 -0
- package/dist/utils/diagram-generator.d.ts.map +1 -0
- package/dist/utils/diagram-generator.js +38 -0
- package/dist/utils/diagram-generator.js.map +1 -0
- package/dist/utils/errors.d.ts +40 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +83 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/file-lock.d.ts +13 -0
- package/dist/utils/file-lock.d.ts.map +1 -0
- package/dist/utils/file-lock.js +80 -0
- package/dist/utils/file-lock.js.map +1 -0
- package/dist/utils/git.d.ts +14 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +56 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/graphify-knowledge.d.ts +6 -0
- package/dist/utils/graphify-knowledge.d.ts.map +1 -0
- package/dist/utils/graphify-knowledge.js +60 -0
- package/dist/utils/graphify-knowledge.js.map +1 -0
- package/dist/utils/graphify.d.ts +49 -0
- package/dist/utils/graphify.d.ts.map +1 -0
- package/dist/utils/graphify.js +306 -0
- package/dist/utils/graphify.js.map +1 -0
- package/dist/utils/json-schemas.d.ts +723 -0
- package/dist/utils/json-schemas.d.ts.map +1 -0
- package/dist/utils/json-schemas.js +147 -0
- package/dist/utils/json-schemas.js.map +1 -0
- package/dist/utils/json.d.ts +15 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +39 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/knowledge-store.d.ts +49 -0
- package/dist/utils/knowledge-store.d.ts.map +1 -0
- package/dist/utils/knowledge-store.js +191 -0
- package/dist/utils/knowledge-store.js.map +1 -0
- package/dist/utils/loop-state.d.ts +51 -0
- package/dist/utils/loop-state.d.ts.map +1 -0
- package/dist/utils/loop-state.js +123 -0
- package/dist/utils/loop-state.js.map +1 -0
- package/dist/utils/paths.d.ts +16 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +66 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/plan-store.d.ts +46 -0
- package/dist/utils/plan-store.d.ts.map +1 -0
- package/dist/utils/plan-store.js +184 -0
- package/dist/utils/plan-store.js.map +1 -0
- package/dist/utils/project-documents.d.ts +20 -0
- package/dist/utils/project-documents.d.ts.map +1 -0
- package/dist/utils/project-documents.js +10 -0
- package/dist/utils/project-documents.js.map +1 -0
- package/dist/utils/project-memory.d.ts +16 -0
- package/dist/utils/project-memory.d.ts.map +1 -0
- package/dist/utils/project-memory.js +16 -0
- package/dist/utils/project-memory.js.map +1 -0
- package/dist/utils/project-resolver.d.ts +28 -0
- package/dist/utils/project-resolver.d.ts.map +1 -0
- package/dist/utils/project-resolver.js +119 -0
- package/dist/utils/project-resolver.js.map +1 -0
- package/dist/utils/quick-scan.d.ts +13 -0
- package/dist/utils/quick-scan.d.ts.map +1 -0
- package/dist/utils/quick-scan.js +156 -0
- package/dist/utils/quick-scan.js.map +1 -0
- package/dist/utils/schemas.d.ts +13 -0
- package/dist/utils/schemas.d.ts.map +1 -0
- package/dist/utils/schemas.js +6 -0
- package/dist/utils/schemas.js.map +1 -0
- package/dist/utils/slug.d.ts +10 -0
- package/dist/utils/slug.d.ts.map +1 -0
- package/dist/utils/slug.js +18 -0
- package/dist/utils/slug.js.map +1 -0
- package/dist/utils/stdin.d.ts +6 -0
- package/dist/utils/stdin.d.ts.map +1 -0
- package/dist/utils/stdin.js +25 -0
- package/dist/utils/stdin.js.map +1 -0
- package/dist/utils/storage-utils.d.ts +48 -0
- package/dist/utils/storage-utils.d.ts.map +1 -0
- package/dist/utils/storage-utils.js +175 -0
- package/dist/utils/storage-utils.js.map +1 -0
- package/dist/utils/task-store.d.ts +49 -0
- package/dist/utils/task-store.d.ts.map +1 -0
- package/dist/utils/task-store.js +178 -0
- package/dist/utils/task-store.js.map +1 -0
- package/dist/utils/template.d.ts +15 -0
- package/dist/utils/template.d.ts.map +1 -0
- package/dist/utils/template.js +27 -0
- package/dist/utils/template.js.map +1 -0
- package/dist/utils/tool-response.d.ts +37 -0
- package/dist/utils/tool-response.d.ts.map +1 -0
- package/dist/utils/tool-response.js +44 -0
- package/dist/utils/tool-response.js.map +1 -0
- package/dist/utils/workflow-policy.d.ts +50 -0
- package/dist/utils/workflow-policy.d.ts.map +1 -0
- package/dist/utils/workflow-policy.js +111 -0
- package/dist/utils/workflow-policy.js.map +1 -0
- package/dist/utils/workspace-match.d.ts +35 -0
- package/dist/utils/workspace-match.d.ts.map +1 -0
- package/dist/utils/workspace-match.js +58 -0
- package/dist/utils/workspace-match.js.map +1 -0
- package/opencode/arcs/.opencode/plugins/arcs.js +348 -0
- package/opencode/arcs/bundle-runtime.json +68 -0
- package/opencode/arcs/manifest.json +279 -0
- package/opencode/arcs/prompts/arcs-docs.txt +124 -0
- package/opencode/arcs/prompts/arcs-orchestrate-caveman.txt +529 -0
- package/opencode/arcs/prompts/arcs-orchestrate.txt +437 -0
- package/opencode/arcs/prompts/code-reviewer.txt +55 -0
- package/opencode/arcs/prompts/devil-advocate.txt +121 -0
- package/opencode/arcs/prompts/docs-researcher.txt +54 -0
- package/opencode/arcs/prompts/oncall-ops.txt +54 -0
- package/opencode/arcs/prompts/qa-analyst.txt +54 -0
- package/opencode/arcs/prompts/software-engineer.txt +48 -0
- package/opencode/arcs/prompts/system-architect.txt +60 -0
- package/opencode/arcs/prompts/tech-architect.txt +54 -0
- package/opencode/arcs/skills/brainstorming/SKILL.md +144 -0
- package/opencode/arcs/skills/brainstorming/scripts/frame-template.html +214 -0
- package/opencode/arcs/skills/brainstorming/scripts/helper.js +88 -0
- package/opencode/arcs/skills/brainstorming/scripts/server.js +338 -0
- package/opencode/arcs/skills/brainstorming/scripts/start-server.sh +137 -0
- package/opencode/arcs/skills/brainstorming/scripts/stop-server.sh +31 -0
- package/opencode/arcs/skills/brainstorming/spec-document-reviewer-prompt.md +50 -0
- package/opencode/arcs/skills/brainstorming/visual-companion.md +277 -0
- package/opencode/arcs/skills/caveman-commit/SKILL.md +51 -0
- package/opencode/arcs/skills/code-agent/SKILL.md +58 -0
- package/opencode/arcs/skills/deep-pr-review/SKILL.md +191 -0
- package/opencode/arcs/skills/deep-pr-review/graphify-diff.md +102 -0
- package/opencode/arcs/skills/deep-pr-review/review-template.md +69 -0
- package/opencode/arcs/skills/executing-plans/SKILL.md +91 -0
- package/opencode/arcs/skills/init-project/SKILL.md +150 -0
- package/opencode/arcs/skills/quick-dev/SKILL.md +47 -0
- package/opencode/arcs/skills/requesting-code-review/SKILL.md +47 -0
- package/opencode/arcs/skills/requesting-code-review/code-reviewer.md +179 -0
- package/opencode/arcs/skills/subagent-driven-development/SKILL.md +162 -0
- package/opencode/arcs/skills/subagent-driven-development/code-quality-reviewer-prompt.md +53 -0
- package/opencode/arcs/skills/subagent-driven-development/implementer-prompt.md +148 -0
- package/opencode/arcs/skills/subagent-driven-development/spec-reviewer-prompt.md +85 -0
- package/opencode/arcs/skills/systematic-debugging/SKILL.md +174 -0
- package/opencode/arcs/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
- package/opencode/arcs/skills/systematic-debugging/condition-based-waiting.md +115 -0
- package/opencode/arcs/skills/systematic-debugging/defense-in-depth.md +122 -0
- package/opencode/arcs/skills/systematic-debugging/find-polluter.sh +63 -0
- package/opencode/arcs/skills/systematic-debugging/phases-reference.md +168 -0
- package/opencode/arcs/skills/systematic-debugging/root-cause-tracing.md +169 -0
- package/opencode/arcs/skills/test-driven-development/SKILL.md +72 -0
- package/opencode/arcs/skills/test-driven-development/tdd-rationalizations-and-examples.md +157 -0
- package/opencode/arcs/skills/test-driven-development/testing-anti-patterns.md +299 -0
- package/opencode/arcs/skills/to-diagram/SKILL.md +235 -0
- package/opencode/arcs/skills/to-diagram/scripts/manage-diagram.mjs +963 -0
- package/opencode/arcs/skills/writing-plans/SKILL.md +179 -0
- package/opencode/arcs/skills/writing-plans/plan-document-reviewer-prompt.md +52 -0
- package/package.json +60 -0
- package/scripts/arcs-cli.mjs +45 -0
- package/skills/explore-dag.md +57 -0
- package/skills/init-project.md +105 -0
- package/skills/orchestrate.md +94 -0
- package/skills/update-docs.md +72 -0
- package/templates/dependency.md.tmpl +9 -0
- package/templates/knowledge.md.tmpl +15 -0
- package/templates/project-meta.json.tmpl +13 -0
- package/templates/project.md.tmpl +11 -0
- package/templates/task.md.tmpl +9 -0
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// Quick Scan — extract initial project context from a git repo
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
import { execSync } from "node:child_process";
|
|
5
|
+
import { existsSync } from "node:fs";
|
|
6
|
+
import { resolve } from "node:path";
|
|
7
|
+
function exec(cmd, cwd) {
|
|
8
|
+
try {
|
|
9
|
+
return execSync(cmd, {
|
|
10
|
+
encoding: "utf-8",
|
|
11
|
+
cwd,
|
|
12
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
13
|
+
timeout: 5000,
|
|
14
|
+
}).trim();
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return null;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function isGitRepo(repoPath) {
|
|
21
|
+
return exec("git rev-parse --is-inside-work-tree", repoPath) === "true";
|
|
22
|
+
}
|
|
23
|
+
function getRecentBranches(repoPath) {
|
|
24
|
+
const output = exec("git branch --sort=-committerdate --format='%(refname:short)'", repoPath);
|
|
25
|
+
if (!output)
|
|
26
|
+
return [];
|
|
27
|
+
return output
|
|
28
|
+
.split("\n")
|
|
29
|
+
.map((b) => b.trim())
|
|
30
|
+
.filter((b) => b && !["main", "master", "HEAD"].includes(b))
|
|
31
|
+
.slice(0, 5);
|
|
32
|
+
}
|
|
33
|
+
function getRecentCommitTopics(repoPath) {
|
|
34
|
+
const output = exec("git log --oneline -20", repoPath);
|
|
35
|
+
if (!output)
|
|
36
|
+
return [];
|
|
37
|
+
const seen = new Set();
|
|
38
|
+
const topics = [];
|
|
39
|
+
for (const line of output.split("\n")) {
|
|
40
|
+
// Remove the short SHA prefix (7 hex chars + space)
|
|
41
|
+
const message = line.replace(/^[0-9a-f]{7,} /, "").trim();
|
|
42
|
+
if (!message)
|
|
43
|
+
continue;
|
|
44
|
+
// Extract conventional commit prefix (feat:, fix:, chore:, etc.) or first 50 chars
|
|
45
|
+
const conventionalMatch = message.match(/^(\w+)(?:\([^)]+\))?:\s*(.+)/);
|
|
46
|
+
const topic = conventionalMatch
|
|
47
|
+
? `${conventionalMatch[1]}: ${conventionalMatch[2].slice(0, 60)}`
|
|
48
|
+
: message.slice(0, 60);
|
|
49
|
+
if (!seen.has(topic)) {
|
|
50
|
+
seen.add(topic);
|
|
51
|
+
topics.push(topic);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return topics;
|
|
55
|
+
}
|
|
56
|
+
function getTodos(repoPath) {
|
|
57
|
+
const excludeDirs = ["node_modules", "dist", ".git", "vendor", "target"];
|
|
58
|
+
const excludeArgs = excludeDirs.map((d) => `--exclude-dir=${d}`).join(" ");
|
|
59
|
+
const includePatterns = ["*.ts", "*.js", "*.py", "*.rs"].map((p) => `--include="${p}"`).join(" ");
|
|
60
|
+
const output = exec(`grep -rn ${excludeArgs} ${includePatterns} "TODO\\|FIXME" . | head -20`, repoPath);
|
|
61
|
+
if (!output)
|
|
62
|
+
return [];
|
|
63
|
+
const todos = [];
|
|
64
|
+
for (const line of output.split("\n")) {
|
|
65
|
+
// Format: ./path/to/file.ts:42: // TODO: fix this
|
|
66
|
+
const match = line.match(/^\.\/(.+?):(\d+):(.+)$/);
|
|
67
|
+
if (!match)
|
|
68
|
+
continue;
|
|
69
|
+
const [, file, lineStr, rawText] = match;
|
|
70
|
+
const text = rawText
|
|
71
|
+
.trim()
|
|
72
|
+
.replace(/^[/*# ]+/, "")
|
|
73
|
+
.trim();
|
|
74
|
+
todos.push({ file, line: parseInt(lineStr, 10), text });
|
|
75
|
+
}
|
|
76
|
+
return todos.slice(0, 20);
|
|
77
|
+
}
|
|
78
|
+
function branchToTaskTitle(branch) {
|
|
79
|
+
// feat/foo-bar → "Implement foo bar"
|
|
80
|
+
// fix/some-bug → "Fix some bug"
|
|
81
|
+
// chore/update-deps → "Update deps"
|
|
82
|
+
const prefixMap = {
|
|
83
|
+
feat: "Implement",
|
|
84
|
+
feature: "Implement",
|
|
85
|
+
fix: "Fix",
|
|
86
|
+
bugfix: "Fix",
|
|
87
|
+
hotfix: "Fix",
|
|
88
|
+
chore: "",
|
|
89
|
+
refactor: "Refactor",
|
|
90
|
+
docs: "Document",
|
|
91
|
+
test: "Test",
|
|
92
|
+
ci: "Configure CI for",
|
|
93
|
+
release: "Release",
|
|
94
|
+
};
|
|
95
|
+
const slashIdx = branch.indexOf("/");
|
|
96
|
+
if (slashIdx === -1) {
|
|
97
|
+
// No prefix — just humanize the branch name
|
|
98
|
+
return humanize(branch);
|
|
99
|
+
}
|
|
100
|
+
const prefix = branch.slice(0, slashIdx).toLowerCase();
|
|
101
|
+
const rest = branch.slice(slashIdx + 1);
|
|
102
|
+
const humanRest = humanize(rest);
|
|
103
|
+
const verb = prefixMap[prefix];
|
|
104
|
+
if (verb === undefined) {
|
|
105
|
+
return humanize(branch.replace("/", " "));
|
|
106
|
+
}
|
|
107
|
+
return verb ? `${verb} ${humanRest}` : humanRest;
|
|
108
|
+
}
|
|
109
|
+
function humanize(slug) {
|
|
110
|
+
return slug
|
|
111
|
+
.replace(/[-_]/g, " ")
|
|
112
|
+
.replace(/\s+/g, " ")
|
|
113
|
+
.trim()
|
|
114
|
+
.replace(/\b\w/g, (c) => c.toUpperCase())
|
|
115
|
+
.replace(/^./, (c) => c.toUpperCase());
|
|
116
|
+
}
|
|
117
|
+
function todoToTaskTitle(todo) {
|
|
118
|
+
// Strip TODO:/FIXME: prefix and return first 80 chars
|
|
119
|
+
return todo.text
|
|
120
|
+
.replace(/^(TODO|FIXME)\s*[:!-]?\s*/i, "")
|
|
121
|
+
.slice(0, 80)
|
|
122
|
+
.trim();
|
|
123
|
+
}
|
|
124
|
+
export function quickScan(repoPath) {
|
|
125
|
+
const absPath = resolve(repoPath);
|
|
126
|
+
if (!existsSync(absPath)) {
|
|
127
|
+
return { recentBranches: [], recentCommitTopics: [], todos: [], suggestedTasks: [] };
|
|
128
|
+
}
|
|
129
|
+
const gitRepo = isGitRepo(absPath);
|
|
130
|
+
const recentBranches = gitRepo ? getRecentBranches(absPath) : [];
|
|
131
|
+
const recentCommitTopics = gitRepo ? getRecentCommitTopics(absPath) : [];
|
|
132
|
+
const todos = getTodos(absPath);
|
|
133
|
+
// Build suggested tasks: branches first, then TODO-derived, dedup, max 5
|
|
134
|
+
const seen = new Set();
|
|
135
|
+
const suggested = [];
|
|
136
|
+
for (const branch of recentBranches) {
|
|
137
|
+
if (suggested.length >= 5)
|
|
138
|
+
break;
|
|
139
|
+
const title = branchToTaskTitle(branch);
|
|
140
|
+
if (title && !seen.has(title.toLowerCase())) {
|
|
141
|
+
seen.add(title.toLowerCase());
|
|
142
|
+
suggested.push(title);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
for (const todo of todos) {
|
|
146
|
+
if (suggested.length >= 5)
|
|
147
|
+
break;
|
|
148
|
+
const title = todoToTaskTitle(todo);
|
|
149
|
+
if (title && title.length > 5 && !seen.has(title.toLowerCase())) {
|
|
150
|
+
seen.add(title.toLowerCase());
|
|
151
|
+
suggested.push(title);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return { recentBranches, recentCommitTopics, todos, suggestedTasks: suggested };
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=quick-scan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quick-scan.js","sourceRoot":"","sources":["../../src/utils/quick-scan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export declare const fileRefSchema: z.ZodObject<{
|
|
3
|
+
path: z.ZodString;
|
|
4
|
+
anchor: z.ZodOptional<z.ZodString>;
|
|
5
|
+
}, "strip", z.ZodTypeAny, {
|
|
6
|
+
path: string;
|
|
7
|
+
anchor?: string | undefined;
|
|
8
|
+
}, {
|
|
9
|
+
path: string;
|
|
10
|
+
anchor?: string | undefined;
|
|
11
|
+
}>;
|
|
12
|
+
export type FileRef = z.infer<typeof fileRefSchema>;
|
|
13
|
+
//# sourceMappingURL=schemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/utils/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,aAAa;;;;;;;;;EAGxB,CAAC;AAEH,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/utils/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IAC9D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;CACxF,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert a project name to a URL-safe slug.
|
|
3
|
+
* "My Cool Project" → "my-cool-project"
|
|
4
|
+
*/
|
|
5
|
+
export declare function slugify(name: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* Normalize a user-provided identifier into the canonical storage form.
|
|
8
|
+
*/
|
|
9
|
+
export declare function normalizeIdentifier(value: string): string;
|
|
10
|
+
//# sourceMappingURL=slug.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slug.d.ts","sourceRoot":"","sources":["../../src/utils/slug.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM5C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzD"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert a project name to a URL-safe slug.
|
|
3
|
+
* "My Cool Project" → "my-cool-project"
|
|
4
|
+
*/
|
|
5
|
+
export function slugify(name) {
|
|
6
|
+
return name
|
|
7
|
+
.toLowerCase()
|
|
8
|
+
.trim()
|
|
9
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
10
|
+
.replace(/^-+|-+$/g, "");
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Normalize a user-provided identifier into the canonical storage form.
|
|
14
|
+
*/
|
|
15
|
+
export function normalizeIdentifier(value) {
|
|
16
|
+
return slugify(value);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=slug.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slug.js","sourceRoot":"","sources":["../../src/utils/slug.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,OAAO,IAAI;SACR,WAAW,EAAE;SACb,IAAI,EAAE;SACN,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdin.d.ts","sourceRoot":"","sources":["../../src/utils/stdin.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAsB,SAAS,CAAC,SAAS,SAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBjE"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
// ---------------------------------------------------------------------------
|
|
2
|
+
// stdin — Shared stdin reading utility
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
/**
|
|
5
|
+
* Read all data from stdin with a configurable timeout.
|
|
6
|
+
* Rejects if no data arrives within the timeout window.
|
|
7
|
+
*/
|
|
8
|
+
export async function readStdin(timeoutMs = 5000) {
|
|
9
|
+
return new Promise((resolve, reject) => {
|
|
10
|
+
const chunks = [];
|
|
11
|
+
const timeout = setTimeout(() => {
|
|
12
|
+
reject(new Error(`Timed out reading from stdin (${timeoutMs / 1000}s). Ensure data is piped to the command.`));
|
|
13
|
+
}, timeoutMs);
|
|
14
|
+
process.stdin.on("data", (chunk) => chunks.push(chunk));
|
|
15
|
+
process.stdin.on("end", () => {
|
|
16
|
+
clearTimeout(timeout);
|
|
17
|
+
resolve(Buffer.concat(chunks).toString("utf-8"));
|
|
18
|
+
});
|
|
19
|
+
process.stdin.on("error", (err) => {
|
|
20
|
+
clearTimeout(timeout);
|
|
21
|
+
reject(err);
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=stdin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdin.js","sourceRoot":"","sources":["../../src/utils/stdin.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,uCAAuC;AACvC,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,SAAS,GAAG,IAAI;IAC9C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,MAAM,CACJ,IAAI,KAAK,CACP,iCAAiC,SAAS,GAAG,IAAI,0CAA0C,CAC5F,CACF,CAAC;QACJ,CAAC,EAAE,SAAS,CAAC,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;YAC3B,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YAChC,YAAY,CAAC,OAAO,CAAC,CAAC;YACtB,MAAM,CAAC,GAAG,CAAC,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared storage utilities for ARCS project stores.
|
|
3
|
+
*
|
|
4
|
+
* Filesystem helpers, validation utilities, and common types used by
|
|
5
|
+
* plan-store, knowledge-store, and task-store modules.
|
|
6
|
+
*/
|
|
7
|
+
export declare const PLAN_STATUSES: readonly ["proposed", "planned", "in_progress", "blocked", "done", "archived"];
|
|
8
|
+
export type PlanStatus = (typeof PLAN_STATUSES)[number];
|
|
9
|
+
export declare const KNOWLEDGE_KINDS: readonly ["lesson", "gotcha", "pattern", "architecture", "module", "feature", "reference", "decision"];
|
|
10
|
+
export type KnowledgeKind = (typeof KNOWLEDGE_KINDS)[number];
|
|
11
|
+
export declare const KNOWLEDGE_AUDIENCES: readonly ["orchestrator", "implementer", "designer", "universal"];
|
|
12
|
+
export type KnowledgeAudience = (typeof KNOWLEDGE_AUDIENCES)[number];
|
|
13
|
+
export declare const TASK_STATUSES: readonly ["backlog", "in_progress", "done", "cancelled"];
|
|
14
|
+
export type TaskStatus = (typeof TASK_STATUSES)[number];
|
|
15
|
+
export declare const TASK_PRIORITIES: readonly ["high", "medium", "low"];
|
|
16
|
+
export type TaskPriority = (typeof TASK_PRIORITIES)[number];
|
|
17
|
+
export interface FileRef {
|
|
18
|
+
path: string;
|
|
19
|
+
anchor?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Validates and normalizes an array of FileRef objects.
|
|
23
|
+
* - path: backslashes normalized to forward slashes first, then validated.
|
|
24
|
+
* Must be relative (no leading /), no .., no empty, no #, comma, or colon.
|
|
25
|
+
* - anchor: if provided, must be non-empty/non-whitespace, no # or comma.
|
|
26
|
+
* Returns a new array with normalized paths. Throws on invalid input.
|
|
27
|
+
*/
|
|
28
|
+
export declare function sanitizeFileRefs(refs: FileRef[]): FileRef[];
|
|
29
|
+
export declare function validatePlanStatus(status: string): asserts status is PlanStatus;
|
|
30
|
+
export declare function validateKnowledgeKind(kind: string): asserts kind is KnowledgeKind;
|
|
31
|
+
export declare function validateTaskStatus(status: string): asserts status is TaskStatus;
|
|
32
|
+
export declare function validateTaskPriority(priority: string): asserts priority is TaskPriority;
|
|
33
|
+
/** A valid keyword is a non-empty, lowercase, alpha-numeric-or-dash string. */
|
|
34
|
+
export declare function sanitizeKeywords(raw: string[]): string[];
|
|
35
|
+
export declare function fileExists(path: string): Promise<boolean>;
|
|
36
|
+
export declare function ensureDir(dir: string): Promise<void>;
|
|
37
|
+
export declare function writeJson(filePath: string, data: unknown): Promise<void>;
|
|
38
|
+
export declare function nowISO(override?: string): string;
|
|
39
|
+
/**
|
|
40
|
+
* Build body markdown. If `content` is supplied and already starts with
|
|
41
|
+
* a matching H1, use as-is. Otherwise, prepend `# title\n\n`.
|
|
42
|
+
*/
|
|
43
|
+
export declare function buildBody(title: string, content?: string): string;
|
|
44
|
+
/**
|
|
45
|
+
* Rewrite the leading H1 in an existing body file.
|
|
46
|
+
*/
|
|
47
|
+
export declare function rewriteH1(filePath: string, newTitle: string): Promise<void>;
|
|
48
|
+
//# sourceMappingURL=storage-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-utils.d.ts","sourceRoot":"","sources":["../../src/utils/storage-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAiBH,eAAO,MAAM,aAAa,gFAOhB,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAExD,eAAO,MAAM,eAAe,wGASlB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE7D,eAAO,MAAM,mBAAmB,mEAKtB,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC;AAMrE,eAAO,MAAM,aAAa,0DAA2D,CAAC;AACtF,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAExD,eAAO,MAAM,eAAe,oCAAqC,CAAC;AAClE,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAM5D,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO,EAAE,CA6B3D;AAMD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,UAAU,CAI/E;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,IAAI,aAAa,CAIjF;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,UAAU,CAI/E;AAED,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,IAAI,YAAY,CAIvF;AAED,+EAA+E;AAC/E,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAexD;AAMD,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO/D;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE1D;AAED,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9E;AAED,wBAAgB,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAEhD;AAMD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAcjE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQjF"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared storage utilities for ARCS project stores.
|
|
3
|
+
*
|
|
4
|
+
* Filesystem helpers, validation utilities, and common types used by
|
|
5
|
+
* plan-store, knowledge-store, and task-store modules.
|
|
6
|
+
*/
|
|
7
|
+
import { constants } from "node:fs";
|
|
8
|
+
import { access, mkdir, readFile, writeFile } from "node:fs/promises";
|
|
9
|
+
import { invalidFileRef, invalidKeyword, invalidKnowledgeKind, invalidPlanStatus, invalidTaskPriority, invalidTaskStatus, } from "./errors.js";
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
// Enums — Plans
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
export const PLAN_STATUSES = [
|
|
14
|
+
"proposed",
|
|
15
|
+
"planned",
|
|
16
|
+
"in_progress",
|
|
17
|
+
"blocked",
|
|
18
|
+
"done",
|
|
19
|
+
"archived",
|
|
20
|
+
];
|
|
21
|
+
export const KNOWLEDGE_KINDS = [
|
|
22
|
+
"lesson",
|
|
23
|
+
"gotcha",
|
|
24
|
+
"pattern",
|
|
25
|
+
"architecture",
|
|
26
|
+
"module",
|
|
27
|
+
"feature",
|
|
28
|
+
"reference",
|
|
29
|
+
"decision",
|
|
30
|
+
];
|
|
31
|
+
export const KNOWLEDGE_AUDIENCES = [
|
|
32
|
+
"orchestrator",
|
|
33
|
+
"implementer",
|
|
34
|
+
"designer",
|
|
35
|
+
"universal",
|
|
36
|
+
];
|
|
37
|
+
// ---------------------------------------------------------------------------
|
|
38
|
+
// Enums — Tasks
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
export const TASK_STATUSES = ["backlog", "in_progress", "done", "cancelled"];
|
|
41
|
+
export const TASK_PRIORITIES = ["high", "medium", "low"];
|
|
42
|
+
/**
|
|
43
|
+
* Validates and normalizes an array of FileRef objects.
|
|
44
|
+
* - path: backslashes normalized to forward slashes first, then validated.
|
|
45
|
+
* Must be relative (no leading /), no .., no empty, no #, comma, or colon.
|
|
46
|
+
* - anchor: if provided, must be non-empty/non-whitespace, no # or comma.
|
|
47
|
+
* Returns a new array with normalized paths. Throws on invalid input.
|
|
48
|
+
*/
|
|
49
|
+
export function sanitizeFileRefs(refs) {
|
|
50
|
+
return refs.map((ref) => {
|
|
51
|
+
// Normalize backslashes to forward slashes first (Windows path compat)
|
|
52
|
+
const path = ref.path.replace(/\\/g, "/").replace(/\/+$/, "");
|
|
53
|
+
if (!path?.trim()) {
|
|
54
|
+
throw invalidFileRef("path must not be empty");
|
|
55
|
+
}
|
|
56
|
+
if (path.startsWith("/")) {
|
|
57
|
+
throw invalidFileRef(`path must be relative, got "${path}"`);
|
|
58
|
+
}
|
|
59
|
+
if (/(^|\/)\.\.($|\/)/.test(path)) {
|
|
60
|
+
throw invalidFileRef(`path must not contain ".." segments, got "${path}"`);
|
|
61
|
+
}
|
|
62
|
+
// Note: backslash already normalized above, so only check #, comma, colon
|
|
63
|
+
if (/[#,:]/.test(path)) {
|
|
64
|
+
throw invalidFileRef(`path must not contain #, comma, or colon, got "${path}"`);
|
|
65
|
+
}
|
|
66
|
+
const result = { path };
|
|
67
|
+
if (ref.anchor !== undefined) {
|
|
68
|
+
if (!ref.anchor?.trim()) {
|
|
69
|
+
throw invalidFileRef("anchor must not be empty or whitespace-only");
|
|
70
|
+
}
|
|
71
|
+
if (/[#,]/.test(ref.anchor)) {
|
|
72
|
+
throw invalidFileRef(`anchor must not contain # or comma, got "${ref.anchor}"`);
|
|
73
|
+
}
|
|
74
|
+
result.anchor = ref.anchor;
|
|
75
|
+
}
|
|
76
|
+
return result;
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
// ---------------------------------------------------------------------------
|
|
80
|
+
// Validation helpers
|
|
81
|
+
// ---------------------------------------------------------------------------
|
|
82
|
+
export function validatePlanStatus(status) {
|
|
83
|
+
if (!PLAN_STATUSES.includes(status)) {
|
|
84
|
+
throw invalidPlanStatus(status);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
export function validateKnowledgeKind(kind) {
|
|
88
|
+
if (!KNOWLEDGE_KINDS.includes(kind)) {
|
|
89
|
+
throw invalidKnowledgeKind(kind);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
export function validateTaskStatus(status) {
|
|
93
|
+
if (!TASK_STATUSES.includes(status)) {
|
|
94
|
+
throw invalidTaskStatus(status);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
export function validateTaskPriority(priority) {
|
|
98
|
+
if (!TASK_PRIORITIES.includes(priority)) {
|
|
99
|
+
throw invalidTaskPriority(priority);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/** A valid keyword is a non-empty, lowercase, alpha-numeric-or-dash string. */
|
|
103
|
+
export function sanitizeKeywords(raw) {
|
|
104
|
+
const seen = new Set();
|
|
105
|
+
const out = [];
|
|
106
|
+
for (const kw of raw) {
|
|
107
|
+
const trimmed = kw.trim().toLowerCase();
|
|
108
|
+
// Reject empty/blank or anything that normalizes to nothing useful
|
|
109
|
+
if (!trimmed || !/[a-z0-9]/.test(trimmed)) {
|
|
110
|
+
throw invalidKeyword(kw);
|
|
111
|
+
}
|
|
112
|
+
if (!seen.has(trimmed)) {
|
|
113
|
+
seen.add(trimmed);
|
|
114
|
+
out.push(trimmed);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return out;
|
|
118
|
+
}
|
|
119
|
+
// ---------------------------------------------------------------------------
|
|
120
|
+
// Filesystem helpers
|
|
121
|
+
// ---------------------------------------------------------------------------
|
|
122
|
+
export async function fileExists(path) {
|
|
123
|
+
try {
|
|
124
|
+
await access(path, constants.F_OK);
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
export async function ensureDir(dir) {
|
|
132
|
+
await mkdir(dir, { recursive: true });
|
|
133
|
+
}
|
|
134
|
+
export async function writeJson(filePath, data) {
|
|
135
|
+
await writeFile(filePath, `${JSON.stringify(data, null, 2)}\n`, "utf-8");
|
|
136
|
+
}
|
|
137
|
+
export function nowISO(override) {
|
|
138
|
+
return override ?? new Date().toISOString();
|
|
139
|
+
}
|
|
140
|
+
// ---------------------------------------------------------------------------
|
|
141
|
+
// H1 rewrite
|
|
142
|
+
// ---------------------------------------------------------------------------
|
|
143
|
+
/**
|
|
144
|
+
* Build body markdown. If `content` is supplied and already starts with
|
|
145
|
+
* a matching H1, use as-is. Otherwise, prepend `# title\n\n`.
|
|
146
|
+
*/
|
|
147
|
+
export function buildBody(title, content) {
|
|
148
|
+
if (content !== undefined) {
|
|
149
|
+
// If content starts with the correct H1, keep it
|
|
150
|
+
if (content.startsWith(`# ${title}`)) {
|
|
151
|
+
return content;
|
|
152
|
+
}
|
|
153
|
+
// If it starts with a different H1, replace it
|
|
154
|
+
if (content.startsWith("# ")) {
|
|
155
|
+
const rest = content.slice(content.indexOf("\n"));
|
|
156
|
+
return `# ${title}${rest}`;
|
|
157
|
+
}
|
|
158
|
+
return `# ${title}\n\n${content}`;
|
|
159
|
+
}
|
|
160
|
+
return `# ${title}\n\n`;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Rewrite the leading H1 in an existing body file.
|
|
164
|
+
*/
|
|
165
|
+
export async function rewriteH1(filePath, newTitle) {
|
|
166
|
+
const body = await readFile(filePath, "utf-8");
|
|
167
|
+
if (body.startsWith("# ")) {
|
|
168
|
+
const rest = body.slice(body.indexOf("\n"));
|
|
169
|
+
await writeFile(filePath, `# ${newTitle}${rest}`, "utf-8");
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
await writeFile(filePath, `# ${newTitle}\n\n${body}`, "utf-8");
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=storage-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-utils.js","sourceRoot":"","sources":["../../src/utils/storage-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EACL,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,UAAU;IACV,SAAS;IACT,aAAa;IACb,SAAS;IACT,MAAM;IACN,UAAU;CACF,CAAC;AAIX,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,cAAc;IACd,QAAQ;IACR,SAAS;IACT,WAAW;IACX,UAAU;CACF,CAAC;AAIX,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,cAAc;IACd,aAAa;IACb,UAAU;IACV,WAAW;CACH,CAAC;AAIX,8EAA8E;AAC9E,gBAAgB;AAChB,8EAA8E;AAE9E,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,CAAU,CAAC;AAGtF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAU,CAAC;AAYlE;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAe;IAC9C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QACtB,uEAAuE;QACvE,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC9D,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC;YAClB,MAAM,cAAc,CAAC,wBAAwB,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,cAAc,CAAC,+BAA+B,IAAI,GAAG,CAAC,CAAC;QAC/D,CAAC;QACD,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,MAAM,cAAc,CAAC,6CAA6C,IAAI,GAAG,CAAC,CAAC;QAC7E,CAAC;QACD,0EAA0E;QAC1E,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,cAAc,CAAC,kDAAkD,IAAI,GAAG,CAAC,CAAC;QAClF,CAAC;QACD,MAAM,MAAM,GAAY,EAAE,IAAI,EAAE,CAAC;QACjC,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC7B,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;gBACxB,MAAM,cAAc,CAAC,6CAA6C,CAAC,CAAC;YACtE,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5B,MAAM,cAAc,CAAC,4CAA4C,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;YAClF,CAAC;YACD,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;QAC7B,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,IAAI,CAAE,aAAmC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3D,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,IAAI,CAAE,eAAqC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3D,MAAM,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,IAAI,CAAE,aAAmC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3D,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,IAAI,CAAE,eAAqC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/D,MAAM,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,gBAAgB,CAAC,GAAa;IAC5C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACxC,mEAAmE;QACnE,IAAI,CAAC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1C,MAAM,cAAc,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACvB,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAClB,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY;IAC3C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,GAAW;IACzC,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAAgB,EAAE,IAAa;IAC7D,MAAM,SAAS,CAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,QAAiB;IACtC,OAAO,QAAQ,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAC9C,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,KAAa,EAAE,OAAgB;IACvD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,iDAAiD;QACjD,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,KAAK,EAAE,CAAC,EAAE,CAAC;YACrC,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,+CAA+C;QAC/C,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YAClD,OAAO,KAAK,KAAK,GAAG,IAAI,EAAE,CAAC;QAC7B,CAAC;QACD,OAAO,KAAK,KAAK,OAAO,OAAO,EAAE,CAAC;IACpC,CAAC;IACD,OAAO,KAAK,KAAK,MAAM,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,QAAgB,EAAE,QAAgB;IAChE,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC/C,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5C,MAAM,SAAS,CAAC,QAAQ,EAAE,KAAK,QAAQ,GAAG,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,MAAM,SAAS,CAAC,QAAQ,EAAE,KAAK,QAAQ,OAAO,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task CRUD storage for ARCS projects.
|
|
3
|
+
*
|
|
4
|
+
* Provides create, list, get, update, delete operations for tasks,
|
|
5
|
+
* with a flat JSON index and markdown render for human-readable output.
|
|
6
|
+
*/
|
|
7
|
+
export type { FileRef, TaskPriority, TaskStatus } from "./storage-utils.js";
|
|
8
|
+
export { TASK_PRIORITIES, TASK_STATUSES } from "./storage-utils.js";
|
|
9
|
+
export interface TaskMeta {
|
|
10
|
+
id: string;
|
|
11
|
+
normalizedId: string;
|
|
12
|
+
title: string;
|
|
13
|
+
status: import("./storage-utils.js").TaskStatus;
|
|
14
|
+
priority: import("./storage-utils.js").TaskPriority;
|
|
15
|
+
planId?: string;
|
|
16
|
+
sourceFiles?: import("./storage-utils.js").FileRef[];
|
|
17
|
+
createdAt: string;
|
|
18
|
+
updatedAt: string;
|
|
19
|
+
}
|
|
20
|
+
interface TaskIndex {
|
|
21
|
+
tasks: TaskMeta[];
|
|
22
|
+
}
|
|
23
|
+
export interface CreateTaskInput {
|
|
24
|
+
title: string;
|
|
25
|
+
status?: import("./storage-utils.js").TaskStatus;
|
|
26
|
+
priority?: import("./storage-utils.js").TaskPriority;
|
|
27
|
+
planId?: string;
|
|
28
|
+
sourceFiles?: import("./storage-utils.js").FileRef[];
|
|
29
|
+
now?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface UpdateTaskInput {
|
|
32
|
+
id: string;
|
|
33
|
+
title?: string;
|
|
34
|
+
status?: import("./storage-utils.js").TaskStatus;
|
|
35
|
+
priority?: import("./storage-utils.js").TaskPriority;
|
|
36
|
+
planId?: string | null;
|
|
37
|
+
sourceFiles?: import("./storage-utils.js").FileRef[];
|
|
38
|
+
now?: string;
|
|
39
|
+
}
|
|
40
|
+
export declare function renderTasksMd(projectDir: string, index: TaskIndex): Promise<void>;
|
|
41
|
+
export declare function createTask(projectDir: string, input: CreateTaskInput): Promise<TaskMeta>;
|
|
42
|
+
export declare function listTasks(projectDir: string, filters?: {
|
|
43
|
+
status?: import("./storage-utils.js").TaskStatus;
|
|
44
|
+
priority?: import("./storage-utils.js").TaskPriority;
|
|
45
|
+
}): Promise<TaskMeta[]>;
|
|
46
|
+
export declare function getTask(projectDir: string, taskId: string): Promise<TaskMeta>;
|
|
47
|
+
export declare function updateTask(projectDir: string, input: UpdateTaskInput): Promise<TaskMeta>;
|
|
48
|
+
export declare function deleteTask(projectDir: string, taskId: string): Promise<void>;
|
|
49
|
+
//# sourceMappingURL=task-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-store.d.ts","sourceRoot":"","sources":["../../src/utils/task-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAuBH,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAMpE,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,OAAO,oBAAoB,EAAE,UAAU,CAAC;IAChD,QAAQ,EAAE,OAAO,oBAAoB,EAAE,YAAY,CAAC;IACpD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,oBAAoB,EAAE,OAAO,EAAE,CAAC;IACrD,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,SAAS;IACjB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAMD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,oBAAoB,EAAE,UAAU,CAAC;IACjD,QAAQ,CAAC,EAAE,OAAO,oBAAoB,EAAE,YAAY,CAAC;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,oBAAoB,EAAE,OAAO,EAAE,CAAC;IACrD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,oBAAoB,EAAE,UAAU,CAAC;IACjD,QAAQ,CAAC,EAAE,OAAO,oBAAoB,EAAE,YAAY,CAAC;IACrD,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,oBAAoB,EAAE,OAAO,EAAE,CAAC;IACrD,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AA0CD,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAgCvF;AAMD,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,CAkC9F;AAED,wBAAsB,SAAS,CAC7B,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE;IACR,MAAM,CAAC,EAAE,OAAO,oBAAoB,EAAE,UAAU,CAAC;IACjD,QAAQ,CAAC,EAAE,OAAO,oBAAoB,EAAE,YAAY,CAAC;CACtD,GACA,OAAO,CAAC,QAAQ,EAAE,CAAC,CAYrB;AAED,wBAAsB,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAQnF;AAED,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,CAuC9F;AAED,wBAAsB,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAWlF"}
|