@the-agenticflow/openflows 0.1.5 → 0.1.8-dev.230.5aa03a0
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/bin/openflows-dashboard.js +1 -1
- package/bin/openflows-setup.js +1 -1
- package/bin/openflows.js +4 -286
- package/package.json +2 -12
- package/scripts/install.js +47 -209
- package/.env.example +0 -60
- package/README.md +0 -217
- package/bin/LICENSE +0 -21
- package/bin/README.md +0 -535
- package/bin/agentflow-bin +0 -0
- package/bin/agentflow-dashboard-bin +0 -0
- package/bin/agentflow-doctor-bin +0 -0
- package/bin/agentflow-setup-bin +0 -0
- package/bin/orchestration/agent/agents/forge.agent.md +0 -110
- package/bin/orchestration/agent/agents/lore.agent.md +0 -27
- package/bin/orchestration/agent/agents/nexus.agent.md +0 -201
- package/bin/orchestration/agent/agents/sentinel.agent.md +0 -96
- package/bin/orchestration/agent/agents/vessel.agent.md +0 -38
- package/bin/orchestration/agent/registry.json +0 -10
- package/bin/orchestration/agent/standards/CODING.md +0 -22
- package/bin/orchestration/agent/standards/REVIEW.md +0 -15
- package/bin/orchestration/agent/standards/SECURITY.md +0 -72
- package/bin/orchestration/plugin/commands/assign.md +0 -45
- package/bin/orchestration/plugin/commands/check-ci.md +0 -26
- package/bin/orchestration/plugin/commands/document-pr.md +0 -32
- package/bin/orchestration/plugin/commands/gate-approve.md +0 -39
- package/bin/orchestration/plugin/commands/handoff.md +0 -75
- package/bin/orchestration/plugin/commands/merge.md +0 -47
- package/bin/orchestration/plugin/commands/plan.md +0 -66
- package/bin/orchestration/plugin/commands/segment-done.md +0 -50
- package/bin/orchestration/plugin/commands/status-check.md +0 -28
- package/bin/orchestration/plugin/commands/status.md +0 -94
- package/bin/orchestration/plugin/commands/update-changelog.md +0 -37
- package/bin/orchestration/plugin/hooks/forge/post_write_lint.sh +0 -76
- package/bin/orchestration/plugin/hooks/forge/pre_bash_guard.sh +0 -81
- package/bin/orchestration/plugin/hooks/forge/pre_compact_handoff.sh +0 -28
- package/bin/orchestration/plugin/hooks/forge/pre_write_check.sh +0 -77
- package/bin/orchestration/plugin/hooks/forge/session_start.sh +0 -59
- package/bin/orchestration/plugin/hooks/forge/stop_require_artifact.sh +0 -75
- package/bin/orchestration/plugin/hooks/lore/session-start.sh +0 -13
- package/bin/orchestration/plugin/hooks/nexus/init-session.sh +0 -23
- package/bin/orchestration/plugin/hooks/nexus/log-decision.sh +0 -10
- package/bin/orchestration/plugin/hooks/sentinel/post_write_validate.sh +0 -59
- package/bin/orchestration/plugin/hooks/sentinel/pre_bash_readonly_guard.sh +0 -107
- package/bin/orchestration/plugin/hooks/sentinel/session_start.sh +0 -74
- package/bin/orchestration/plugin/hooks/sentinel/stop_require_eval.sh +0 -57
- package/bin/orchestration/plugin/hooks/vessel/log-merge-status.sh +0 -7
- package/bin/orchestration/plugin/hooks/vessel/session-start.sh +0 -14
- package/bin/orchestration/plugin/mcp/mcp.json.template +0 -26
- package/bin/orchestration/plugin/plugin.json +0 -66
- package/bin/orchestration/plugin/skills/forge-algorithmic-art.md +0 -24
- package/bin/orchestration/plugin/skills/forge-canvas-design.md +0 -25
- package/bin/orchestration/plugin/skills/forge-coding.md +0 -161
- package/bin/orchestration/plugin/skills/forge-frontend-design.md +0 -30
- package/bin/orchestration/plugin/skills/forge-mcp-builder.md +0 -37
- package/bin/orchestration/plugin/skills/forge-planning.md +0 -102
- package/bin/orchestration/plugin/skills/forge-skill-creator.md +0 -25
- package/bin/orchestration/plugin/skills/forge-web-artifacts-builder.md +0 -29
- package/bin/orchestration/plugin/skills/lore-brand-guidelines.md +0 -33
- package/bin/orchestration/plugin/skills/lore-changelog.md +0 -69
- package/bin/orchestration/plugin/skills/lore-doc-coauthoring.md +0 -33
- package/bin/orchestration/plugin/skills/lore-documentation.md +0 -57
- package/bin/orchestration/plugin/skills/lore-docx.md +0 -20
- package/bin/orchestration/plugin/skills/lore-pdf.md +0 -20
- package/bin/orchestration/plugin/skills/lore-pptx.md +0 -23
- package/bin/orchestration/plugin/skills/lore-theme-factory.md +0 -20
- package/bin/orchestration/plugin/skills/lore-xlsx.md +0 -20
- package/bin/orchestration/plugin/skills/nexus-doc-coauthoring.md +0 -21
- package/bin/orchestration/plugin/skills/nexus-internal-comms.md +0 -28
- package/bin/orchestration/plugin/skills/nexus-orchestration.md +0 -63
- package/bin/orchestration/plugin/skills/nexus-skill-creator.md +0 -15
- package/bin/orchestration/plugin/skills/nexus-slack-gif-creator.md +0 -21
- package/bin/orchestration/plugin/skills/nexus-triage.md +0 -56
- package/bin/orchestration/plugin/skills/nexus-xlsx.md +0 -20
- package/bin/orchestration/plugin/skills/sentinel-algorithmic-art.md +0 -20
- package/bin/orchestration/plugin/skills/sentinel-criteria.md +0 -115
- package/bin/orchestration/plugin/skills/sentinel-frontend-design.md +0 -20
- package/bin/orchestration/plugin/skills/sentinel-review.md +0 -124
- package/bin/orchestration/plugin/skills/sentinel-web-artifacts-builder.md +0 -20
- package/bin/orchestration/plugin/skills/sentinel-webapp-testing.md +0 -34
- package/bin/orchestration/plugin/skills/shared-claude-api.md +0 -25
- package/bin/orchestration/plugin/skills/vessel-ci-gate.md +0 -68
- package/bin/orchestration/plugin/skills/vessel-internal-comms.md +0 -20
- package/bin/orchestration/plugin/skills/vessel-mcp-builder.md +0 -21
- package/bin/orchestration/plugin/skills/vessel-merge-protocol.md +0 -113
- package/bin/orchestration/plugin/skills/vessel-pdf.md +0 -20
- package/bin/orchestration/plugin/skills/vessel-webapp-testing.md +0 -34
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Runs when FORGE starts a new session
|
|
3
|
-
# This hook runs at the beginning of every FORGE session
|
|
4
|
-
|
|
5
|
-
PAIR_ID="${SPRINTLESS_PAIR_ID}"
|
|
6
|
-
TICKET_ID="${SPRINTLESS_TICKET_ID}"
|
|
7
|
-
SHARED="${SPRINTLESS_SHARED}"
|
|
8
|
-
WORKTREE="${SPRINTLESS_WORKTREE}"
|
|
9
|
-
|
|
10
|
-
# Log session start to shared event log
|
|
11
|
-
echo "[$(date -u +%Y-%m-%dT%H:%M:%SZ)] forge-${PAIR_ID} session_start ticket=${TICKET_ID}" \
|
|
12
|
-
>> "${SHARED}/../events.log"
|
|
13
|
-
|
|
14
|
-
# Check if this is a resume (HANDOFF.md exists)
|
|
15
|
-
if [ -f "${SHARED}/HANDOFF.md" ]; then
|
|
16
|
-
echo "=========================================="
|
|
17
|
-
echo " RESUME MODE: HANDOFF.md found"
|
|
18
|
-
echo "=========================================="
|
|
19
|
-
echo ""
|
|
20
|
-
echo "Read ${SHARED}/HANDOFF.md before doing anything else."
|
|
21
|
-
echo "Continue from the exact next step described in the handoff."
|
|
22
|
-
echo ""
|
|
23
|
-
echo "Key things to check:"
|
|
24
|
-
echo " 1. Which segments are already complete"
|
|
25
|
-
echo " 2. Which segment is in progress"
|
|
26
|
-
echo " 3. Decisions already made (do not contradict)"
|
|
27
|
-
echo " 4. Files already written (do not rewrite)"
|
|
28
|
-
echo " 5. Exact next step to take"
|
|
29
|
-
echo ""
|
|
30
|
-
else
|
|
31
|
-
echo "=========================================="
|
|
32
|
-
echo " NEW SESSION: No handoff found"
|
|
33
|
-
echo "=========================================="
|
|
34
|
-
echo ""
|
|
35
|
-
echo "Starting fresh on ticket ${TICKET_ID}"
|
|
36
|
-
echo ""
|
|
37
|
-
echo "IMPORTANT - Directory Structure:"
|
|
38
|
-
echo " CURRENT DIR (worktree): ${WORKTREE}"
|
|
39
|
-
echo " -> Write ALL source code, tests, package.json here"
|
|
40
|
-
echo " SHARED DIR: ${SHARED}"
|
|
41
|
-
echo " -> Write PLAN.md, WORKLOG.md, STATUS.json here"
|
|
42
|
-
echo ""
|
|
43
|
-
echo "First steps:"
|
|
44
|
-
echo " 1. Read ${SHARED}/TICKET.md to understand the task"
|
|
45
|
-
echo " 2. Read ${SHARED}/TASK.md for specific instructions"
|
|
46
|
-
echo " 3. Use /plan command to create ${SHARED}/PLAN.md"
|
|
47
|
-
echo " 4. Wait for CONTRACT.md from SENTINEL"
|
|
48
|
-
echo ""
|
|
49
|
-
fi
|
|
50
|
-
|
|
51
|
-
# Show current state
|
|
52
|
-
echo "Environment:"
|
|
53
|
-
echo " PAIR_ID: ${PAIR_ID}"
|
|
54
|
-
echo " TICKET_ID: ${TICKET_ID}"
|
|
55
|
-
echo " WORKTREE: ${WORKTREE}"
|
|
56
|
-
echo " SHARED: ${SHARED}"
|
|
57
|
-
echo ""
|
|
58
|
-
|
|
59
|
-
exit 0
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Runs on Stop - FORGE cannot exit without a terminal artifact
|
|
3
|
-
# This ensures FORGE always leaves a clear state for the harness
|
|
4
|
-
#
|
|
5
|
-
# Environment:
|
|
6
|
-
# SPRINTLESS_SHARED - the shared directory
|
|
7
|
-
|
|
8
|
-
SHARED="${SPRINTLESS_SHARED}"
|
|
9
|
-
|
|
10
|
-
# Accept: STATUS.json written (done or blocked)
|
|
11
|
-
if [ -f "${SHARED}/STATUS.json" ]; then
|
|
12
|
-
# Validate it has required fields
|
|
13
|
-
if command -v python3 &> /dev/null; then
|
|
14
|
-
VALID=$(python3 -c "
|
|
15
|
-
import json, sys
|
|
16
|
-
try:
|
|
17
|
-
s = json.load(open('${SHARED}/STATUS.json'))
|
|
18
|
-
required = ['status','pair','ticket_id','files_changed']
|
|
19
|
-
missing = [k for k in required if k not in s]
|
|
20
|
-
valid_statuses = ['PR_OPENED','BLOCKED','FUEL_EXHAUSTED','PENDING_REVIEW']
|
|
21
|
-
# Note: IMPLEMENTATION_COMPLETE and COMPLETED are NOT valid terminal statuses
|
|
22
|
-
# FORGE must push and create PR (PR_OPENED) or explicitly block
|
|
23
|
-
if missing:
|
|
24
|
-
print(f'missing: {missing}')
|
|
25
|
-
sys.exit(1)
|
|
26
|
-
if s['status'] not in valid_statuses:
|
|
27
|
-
print(f'invalid status: {s[\"status\"]}')
|
|
28
|
-
sys.exit(1)
|
|
29
|
-
except Exception as e:
|
|
30
|
-
print(str(e))
|
|
31
|
-
sys.exit(1)
|
|
32
|
-
" 2>&1)
|
|
33
|
-
if [ $? -ne 0 ]; then
|
|
34
|
-
echo "STATUS.json exists but is invalid: ${VALID}"
|
|
35
|
-
echo "Fix STATUS.json before exiting."
|
|
36
|
-
echo ""
|
|
37
|
-
echo "Required fields: status, pair, ticket_id, files_changed"
|
|
38
|
-
echo "Valid statuses: PR_OPENED, BLOCKED, FUEL_EXHAUSTED, PENDING_REVIEW"
|
|
39
|
-
exit 2
|
|
40
|
-
fi
|
|
41
|
-
fi
|
|
42
|
-
exit 0
|
|
43
|
-
fi
|
|
44
|
-
|
|
45
|
-
# Accept: HANDOFF.md written (context reset in progress)
|
|
46
|
-
if [ -f "${SHARED}/HANDOFF.md" ]; then
|
|
47
|
-
# Verify HANDOFF.md has required sections
|
|
48
|
-
if grep -q "## Exact next step" "${SHARED}/HANDOFF.md"; then
|
|
49
|
-
exit 0
|
|
50
|
-
else
|
|
51
|
-
echo "HANDOFF.md is incomplete. It must contain '## Exact next step'."
|
|
52
|
-
echo ""
|
|
53
|
-
echo "Required sections in HANDOFF.md:"
|
|
54
|
-
echo " - ## Completed Segments"
|
|
55
|
-
echo " - ## Decisions"
|
|
56
|
-
echo " - ## Files Changed"
|
|
57
|
-
echo " - ## Exact next step"
|
|
58
|
-
exit 2
|
|
59
|
-
fi
|
|
60
|
-
fi
|
|
61
|
-
|
|
62
|
-
# Neither exists - block exit
|
|
63
|
-
echo "=============================================="
|
|
64
|
-
echo " BLOCKED: Cannot exit without terminal artifact"
|
|
65
|
-
echo "=============================================="
|
|
66
|
-
echo ""
|
|
67
|
-
echo "You must write either:"
|
|
68
|
-
echo " - ${SHARED}/STATUS.json (if done or blocked)"
|
|
69
|
-
echo " - ${SHARED}/HANDOFF.md (if context reset needed)"
|
|
70
|
-
echo ""
|
|
71
|
-
echo "Use /status command if your work is complete."
|
|
72
|
-
echo "Use /handoff command if you need a context reset."
|
|
73
|
-
echo ""
|
|
74
|
-
|
|
75
|
-
exit 2
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# LORE Session Start Hook
|
|
3
|
-
# Initializes the documenter session
|
|
4
|
-
|
|
5
|
-
echo "=========================================="
|
|
6
|
-
echo "LORE Session Starting"
|
|
7
|
-
echo "=========================================="
|
|
8
|
-
echo ""
|
|
9
|
-
echo "Checking for recently merged PRs..."
|
|
10
|
-
|
|
11
|
-
# Lore monitors merged PRs and updates documentation
|
|
12
|
-
|
|
13
|
-
exit 0
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# NEXUS Session Start Hook
|
|
3
|
-
# Initializes the orchestrator session
|
|
4
|
-
|
|
5
|
-
echo "NEXUS session starting..."
|
|
6
|
-
echo "Reading registry from: ${AGENTFLOW_REGISTRY:-.agent/registry.json}"
|
|
7
|
-
echo "Store path: ${AGENTFLOW_STORE:-.agent/store.json}"
|
|
8
|
-
|
|
9
|
-
# Check if jq is installed
|
|
10
|
-
if ! command -v jq &> /dev/null; then
|
|
11
|
-
echo "ERROR: jq is not installed. Please install it to use NEXUS."
|
|
12
|
-
exit 1
|
|
13
|
-
fi
|
|
14
|
-
|
|
15
|
-
# Check for pending command gate items
|
|
16
|
-
if [ -n "${AGENTFLOW_STORE}" ] && [ -f "${AGENTFLOW_STORE}" ]; then
|
|
17
|
-
GATE_PENDING=$(jq -r '.command_gate | length // 0' "${AGENTFLOW_STORE}" 2>/dev/null || echo "0")
|
|
18
|
-
if [ "$GATE_PENDING" -gt 0 ]; then
|
|
19
|
-
echo "WARNING: ${GATE_PENDING} pending command(s) awaiting approval"
|
|
20
|
-
fi
|
|
21
|
-
fi
|
|
22
|
-
|
|
23
|
-
exit 0
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# SENTINEL Post-Write Validation Hook
|
|
3
|
-
# Validates that eval files have correct structure
|
|
4
|
-
#
|
|
5
|
-
# Environment:
|
|
6
|
-
# SPRINTLESS_SHARED - the shared directory
|
|
7
|
-
# CLAUDE_FILE - the file that was just written (injected by Claude Code)
|
|
8
|
-
|
|
9
|
-
SHARED="${SPRINTLESS_SHARED}"
|
|
10
|
-
FILE="${CLAUDE_FILE:-}"
|
|
11
|
-
|
|
12
|
-
# Only validate eval files
|
|
13
|
-
if [[ ! "$FILE" =~ -eval\.md$ ]] && [[ ! "$FILE" =~ final-review\.md$ ]]; then
|
|
14
|
-
exit 0
|
|
15
|
-
fi
|
|
16
|
-
|
|
17
|
-
echo "Validating evaluation file: ${FILE}"
|
|
18
|
-
echo ""
|
|
19
|
-
|
|
20
|
-
# Check required sections
|
|
21
|
-
MISSING=""
|
|
22
|
-
|
|
23
|
-
if ! grep -q "## Summary" "$FILE"; then
|
|
24
|
-
MISSING="${MISSING}Summary, "
|
|
25
|
-
fi
|
|
26
|
-
|
|
27
|
-
if ! grep -q "## Tests Run" "$FILE" && ! grep -q "## Test Results" "$FILE"; then
|
|
28
|
-
MISSING="${MISSING}Tests Run, "
|
|
29
|
-
fi
|
|
30
|
-
|
|
31
|
-
if ! grep -q "## Verdict" "$FILE"; then
|
|
32
|
-
MISSING="${MISSING}Verdict, "
|
|
33
|
-
fi
|
|
34
|
-
|
|
35
|
-
# Check verdict is valid
|
|
36
|
-
VERDICT=$(grep -oP '(?<=## Verdict\n)[A-Z_]+' "$FILE" 2>/dev/null || echo "")
|
|
37
|
-
if [ -n "$VERDICT" ]; then
|
|
38
|
-
if [ "$VERDICT" != "APPROVED" ] && [ "$VERDICT" != "NEEDS_WORK" ]; then
|
|
39
|
-
echo "ERROR: Invalid verdict '${VERDICT}'. Must be APPROVED or NEEDS_WORK."
|
|
40
|
-
exit 2
|
|
41
|
-
fi
|
|
42
|
-
fi
|
|
43
|
-
|
|
44
|
-
if [ -n "$MISSING" ]; then
|
|
45
|
-
echo "ERROR: Missing required sections: ${MISSING%,*}"
|
|
46
|
-
echo ""
|
|
47
|
-
echo "Required sections for eval files:"
|
|
48
|
-
echo " - ## Summary"
|
|
49
|
-
echo " - ## Tests Run (or ## Test Results)"
|
|
50
|
-
echo " - ## Verdict (APPROVED or NEEDS_WORK)"
|
|
51
|
-
echo ""
|
|
52
|
-
echo "If NEEDS_WORK, also include:"
|
|
53
|
-
echo " - ## Issues Found"
|
|
54
|
-
echo " - ## Required Fixes"
|
|
55
|
-
exit 2
|
|
56
|
-
fi
|
|
57
|
-
|
|
58
|
-
echo "Validation passed."
|
|
59
|
-
exit 0
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# SENTINEL Pre-Bash Guard Hook
|
|
3
|
-
# Enforces read-only mode - SENTINEL cannot modify source files
|
|
4
|
-
#
|
|
5
|
-
# Environment:
|
|
6
|
-
# SPRINTLESS_WORKTREE - the worktree path (source code)
|
|
7
|
-
# SPRINTLESS_SHARED - the shared directory (allowed writes)
|
|
8
|
-
# CLAUDE_BASH_COMMAND - the command about to run (injected by Claude Code)
|
|
9
|
-
|
|
10
|
-
WORKTREE="${SPRINTLESS_WORKTREE:-}"
|
|
11
|
-
SHARED="${SPRINTLESS_SHARED:-}"
|
|
12
|
-
CMD="${CLAUDE_BASH_COMMAND:-}"
|
|
13
|
-
|
|
14
|
-
# If no command, allow
|
|
15
|
-
if [ -z "$CMD" ]; then
|
|
16
|
-
exit 0
|
|
17
|
-
fi
|
|
18
|
-
|
|
19
|
-
# Blocked commands - SENTINEL cannot use these at all
|
|
20
|
-
BLOCKED_PATTERNS=(
|
|
21
|
-
"git "
|
|
22
|
-
"git"
|
|
23
|
-
"rm "
|
|
24
|
-
"rm"
|
|
25
|
-
"sudo "
|
|
26
|
-
"npm install"
|
|
27
|
-
"pip install"
|
|
28
|
-
"cargo install"
|
|
29
|
-
"mv "
|
|
30
|
-
"cp "
|
|
31
|
-
"chmod"
|
|
32
|
-
"chown"
|
|
33
|
-
)
|
|
34
|
-
|
|
35
|
-
for pattern in "${BLOCKED_PATTERNS[@]}"; do
|
|
36
|
-
if [[ "$CMD" == *"$pattern"* ]]; then
|
|
37
|
-
echo "=============================================="
|
|
38
|
-
echo " BLOCKED: Command not allowed for SENTINEL"
|
|
39
|
-
echo "=============================================="
|
|
40
|
-
echo ""
|
|
41
|
-
echo "Command: ${CMD}"
|
|
42
|
-
echo ""
|
|
43
|
-
echo "SENTINEL is read-only. You cannot:"
|
|
44
|
-
echo " - Use git commands"
|
|
45
|
-
echo " - Delete files (rm)"
|
|
46
|
-
echo " - Move or copy files"
|
|
47
|
-
echo " - Install packages"
|
|
48
|
-
echo " - Modify permissions"
|
|
49
|
-
echo ""
|
|
50
|
-
echo "You CAN:"
|
|
51
|
-
echo " - Read files (cat, head, tail, less)"
|
|
52
|
-
echo " - Run tests and linters"
|
|
53
|
-
echo " - Search code (grep, find)"
|
|
54
|
-
echo " - Write to shared/ directory"
|
|
55
|
-
echo ""
|
|
56
|
-
exit 2
|
|
57
|
-
fi
|
|
58
|
-
done
|
|
59
|
-
|
|
60
|
-
# Check if command writes to source tree
|
|
61
|
-
if [ -n "$WORKTREE" ]; then
|
|
62
|
-
# Patterns that write files
|
|
63
|
-
WRITE_PATTERNS=(
|
|
64
|
-
" > "
|
|
65
|
-
" >> "
|
|
66
|
-
" 2> "
|
|
67
|
-
" | tee "
|
|
68
|
-
"sed -i"
|
|
69
|
-
"awk -i"
|
|
70
|
-
"truncate"
|
|
71
|
-
"dd if="
|
|
72
|
-
)
|
|
73
|
-
|
|
74
|
-
for pattern in "${WRITE_PATTERNS[@]}"; do
|
|
75
|
-
if [[ "$CMD" == *"$pattern"* ]]; then
|
|
76
|
-
# Check if the redirect target is in worktree
|
|
77
|
-
# Extract the file path after the redirect
|
|
78
|
-
REDIRECT_FILE=$(echo "$CMD" | grep -oP '(?<=[<>])\s*\S+' | head -1 | tr -d ' ')
|
|
79
|
-
|
|
80
|
-
if [ -n "$REDIRECT_FILE" ]; then
|
|
81
|
-
# Get absolute path
|
|
82
|
-
if [[ "$REDIRECT_FILE" != /* ]]; then
|
|
83
|
-
REDIRECT_FILE="${WORKTREE}/${REDIRECT_FILE}"
|
|
84
|
-
fi
|
|
85
|
-
|
|
86
|
-
# Check if it's inside worktree but NOT in shared
|
|
87
|
-
if [[ "$REDIRECT_FILE" == "$WORKTREE"* ]] && [[ "$REDIRECT_FILE" != *"$SHARED"* ]]; then
|
|
88
|
-
echo "=============================================="
|
|
89
|
-
echo " BLOCKED: Cannot write to source tree"
|
|
90
|
-
echo "=============================================="
|
|
91
|
-
echo ""
|
|
92
|
-
echo "Command: ${CMD}"
|
|
93
|
-
echo ""
|
|
94
|
-
echo "SENTINEL can only write to: ${SHARED}"
|
|
95
|
-
echo "Attempted write to: ${REDIRECT_FILE}"
|
|
96
|
-
echo ""
|
|
97
|
-
echo "All your outputs (eval files, reviews) go in shared/."
|
|
98
|
-
echo ""
|
|
99
|
-
exit 2
|
|
100
|
-
fi
|
|
101
|
-
fi
|
|
102
|
-
fi
|
|
103
|
-
done
|
|
104
|
-
fi
|
|
105
|
-
|
|
106
|
-
# Allow the command
|
|
107
|
-
exit 0
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# SENTINEL Session Start Hook
|
|
3
|
-
# Determines segment mode and reads the correct input artifacts
|
|
4
|
-
#
|
|
5
|
-
# Environment:
|
|
6
|
-
# SPRINTLESS_SHARED - the shared directory
|
|
7
|
-
# SPRINTLESS_SEGMENT - segment number (set by harness)
|
|
8
|
-
|
|
9
|
-
SHARED="${SPRINTLESS_SHARED}"
|
|
10
|
-
SEGMENT="${SPRINTLESS_SEGMENT:-1}"
|
|
11
|
-
|
|
12
|
-
echo "=============================================="
|
|
13
|
-
echo " SENTINEL SESSION STARTED"
|
|
14
|
-
echo "=============================================="
|
|
15
|
-
echo ""
|
|
16
|
-
echo "Segment: ${SEGMENT}"
|
|
17
|
-
echo ""
|
|
18
|
-
|
|
19
|
-
# Determine mode based on what files exist
|
|
20
|
-
if [ "${SEGMENT}" = "final" ] || [ -f "${SHARED}/DONE.md" ]; then
|
|
21
|
-
echo "MODE: FINAL_REVIEW"
|
|
22
|
-
echo ""
|
|
23
|
-
echo "Reading DONE.md to verify completion..."
|
|
24
|
-
if [ -f "${SHARED}/DONE.md" ]; then
|
|
25
|
-
echo "--- DONE.md ---"
|
|
26
|
-
head -50 "${SHARED}/DONE.md"
|
|
27
|
-
echo "..."
|
|
28
|
-
else
|
|
29
|
-
echo "ERROR: DONE.md not found. Cannot perform final review."
|
|
30
|
-
exit 1
|
|
31
|
-
fi
|
|
32
|
-
elif [ -f "${SHARED}/PLAN.md" ]; then
|
|
33
|
-
echo "MODE: SEGMENT_REVIEW"
|
|
34
|
-
echo ""
|
|
35
|
-
echo "Reading PLAN.md and segment inputs..."
|
|
36
|
-
echo ""
|
|
37
|
-
echo "--- PLAN.md (first 30 lines) ---"
|
|
38
|
-
head -30 "${SHARED}/PLAN.md"
|
|
39
|
-
echo "..."
|
|
40
|
-
echo ""
|
|
41
|
-
if [ -f "${SHARED}/WORKLOG.md" ]; then
|
|
42
|
-
echo "--- WORKLOG.md (last 20 lines) ---"
|
|
43
|
-
tail -20 "${SHARED}/WORKLOG.md"
|
|
44
|
-
echo ""
|
|
45
|
-
fi
|
|
46
|
-
else
|
|
47
|
-
echo "MODE: UNKNOWN - No PLAN.md found"
|
|
48
|
-
echo "This may be an initial setup. Check TICKET.md and TASK.md."
|
|
49
|
-
if [ -f "${SHARED}/TICKET.md" ]; then
|
|
50
|
-
echo ""
|
|
51
|
-
echo "--- TICKET.md ---"
|
|
52
|
-
cat "${SHARED}/TICKET.md"
|
|
53
|
-
fi
|
|
54
|
-
fi
|
|
55
|
-
|
|
56
|
-
echo ""
|
|
57
|
-
echo "=============================================="
|
|
58
|
-
echo " YOUR MISSION"
|
|
59
|
-
echo "=============================================="
|
|
60
|
-
echo ""
|
|
61
|
-
echo "1. Read the segment changes from WORKLOG.md"
|
|
62
|
-
echo "2. Run tests and linters to verify quality"
|
|
63
|
-
echo "3. Write your evaluation to segment-${SEGMENT}-eval.md"
|
|
64
|
-
echo ""
|
|
65
|
-
echo "Evaluation must include:"
|
|
66
|
-
echo " - ## Summary"
|
|
67
|
-
echo " - ## Tests Run"
|
|
68
|
-
echo " - ## Issues Found (if any)"
|
|
69
|
-
echo " - ## Verdict (APPROVED / NEEDS_WORK)"
|
|
70
|
-
echo ""
|
|
71
|
-
echo "If NEEDS_WORK, list specific issues that must be fixed."
|
|
72
|
-
echo ""
|
|
73
|
-
|
|
74
|
-
exit 0
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# SENTINEL Stop Hook
|
|
3
|
-
# Ensures SENTINEL writes an eval file before exiting
|
|
4
|
-
#
|
|
5
|
-
# Environment:
|
|
6
|
-
# SPRINTLESS_SHARED - the shared directory
|
|
7
|
-
# SPRINTLESS_SEGMENT - segment number (set by harness)
|
|
8
|
-
|
|
9
|
-
SHARED="${SPRINTLESS_SHARED}"
|
|
10
|
-
SEGMENT="${SPRINTLESS_SEGMENT:-1}"
|
|
11
|
-
|
|
12
|
-
# Determine expected eval file
|
|
13
|
-
if [ "${SEGMENT}" = "final" ]; then
|
|
14
|
-
EVAL_FILE="${SHARED}/final-review.md"
|
|
15
|
-
else
|
|
16
|
-
EVAL_FILE="${SHARED}/segment-${SEGMENT}-eval.md"
|
|
17
|
-
fi
|
|
18
|
-
|
|
19
|
-
# Check if eval file exists
|
|
20
|
-
if [ -f "$EVAL_FILE" ]; then
|
|
21
|
-
# Validate it has a verdict
|
|
22
|
-
if grep -q "## Verdict" "$EVAL_FILE"; then
|
|
23
|
-
VERDICT=$(grep -A1 "## Verdict" "$EVAL_FILE" | tail -1 | tr -d ' ')
|
|
24
|
-
|
|
25
|
-
if [ "$VERDICT" = "APPROVED" ] || [ "$VERDICT" = "NEEDS_WORK" ]; then
|
|
26
|
-
echo "Evaluation complete: ${VERDICT}"
|
|
27
|
-
exit 0
|
|
28
|
-
else
|
|
29
|
-
echo "ERROR: Invalid verdict in ${EVAL_FILE}"
|
|
30
|
-
echo "Verdict must be APPROVED or NEEDS_WORK, got: ${VERDICT}"
|
|
31
|
-
exit 2
|
|
32
|
-
fi
|
|
33
|
-
else
|
|
34
|
-
echo "ERROR: ${EVAL_FILE} missing ## Verdict section"
|
|
35
|
-
exit 2
|
|
36
|
-
fi
|
|
37
|
-
fi
|
|
38
|
-
|
|
39
|
-
# No eval file - block exit
|
|
40
|
-
echo "=============================================="
|
|
41
|
-
echo " BLOCKED: Cannot exit without evaluation"
|
|
42
|
-
echo "=============================================="
|
|
43
|
-
echo ""
|
|
44
|
-
echo "You must write your evaluation to:"
|
|
45
|
-
echo " ${EVAL_FILE}"
|
|
46
|
-
echo ""
|
|
47
|
-
echo "Required sections:"
|
|
48
|
-
echo " - ## Summary"
|
|
49
|
-
echo " - ## Tests Run"
|
|
50
|
-
echo " - ## Issues Found (if any)"
|
|
51
|
-
echo " - ## Verdict (APPROVED or NEEDS_WORK)"
|
|
52
|
-
echo ""
|
|
53
|
-
echo "If NEEDS_WORK, include:"
|
|
54
|
-
echo " - ## Required Fixes (specific, actionable items)"
|
|
55
|
-
echo ""
|
|
56
|
-
|
|
57
|
-
exit 2
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# VESSEL Session Start Hook
|
|
3
|
-
# Initializes the deployer session
|
|
4
|
-
|
|
5
|
-
echo "=========================================="
|
|
6
|
-
echo "VESSEL Session Starting"
|
|
7
|
-
echo "=========================================="
|
|
8
|
-
echo ""
|
|
9
|
-
echo "Checking for open PRs from forge branches..."
|
|
10
|
-
|
|
11
|
-
# Vessel monitors open PRs and CI status
|
|
12
|
-
# This would typically query GitHub API
|
|
13
|
-
|
|
14
|
-
exit 0
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"mcpServers": {
|
|
3
|
-
"github": {
|
|
4
|
-
"command": "npx",
|
|
5
|
-
"args": ["-y", "@modelcontextprotocol/server-github"],
|
|
6
|
-
"env": {
|
|
7
|
-
"GITHUB_PERSONAL_ACCESS_TOKEN": "${SPRINTLESS_GITHUB_TOKEN}"
|
|
8
|
-
}
|
|
9
|
-
},
|
|
10
|
-
"filesystem": {
|
|
11
|
-
"command": "npx",
|
|
12
|
-
"args": [
|
|
13
|
-
"-y",
|
|
14
|
-
"@modelcontextprotocol/server-filesystem",
|
|
15
|
-
"${SPRINTLESS_WORKTREE}"
|
|
16
|
-
]
|
|
17
|
-
},
|
|
18
|
-
"shell": {
|
|
19
|
-
"command": "shell-mcp-server",
|
|
20
|
-
"args": [
|
|
21
|
-
"--allowlist",
|
|
22
|
-
"orchestration/agent/tooling/run-tests.sh,cargo clippy,cargo test,npx eslint,npx jest,ruff check"
|
|
23
|
-
]
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "orchestration",
|
|
3
|
-
"version": "3.0.0",
|
|
4
|
-
"description": "Autonomous agent pair tooling for AgentFlow FORGE-SENTINEL architecture",
|
|
5
|
-
"skills": {
|
|
6
|
-
"forge": [
|
|
7
|
-
"skills/forge-coding.md",
|
|
8
|
-
"skills/forge-planning.md",
|
|
9
|
-
"skills/forge-frontend-design.md",
|
|
10
|
-
"skills/forge-mcp-builder.md",
|
|
11
|
-
"skills/forge-skill-creator.md",
|
|
12
|
-
"skills/forge-canvas-design.md",
|
|
13
|
-
"skills/forge-web-artifacts-builder.md",
|
|
14
|
-
"skills/forge-algorithmic-art.md",
|
|
15
|
-
"skills/shared-claude-api.md"
|
|
16
|
-
],
|
|
17
|
-
"sentinel": [
|
|
18
|
-
"skills/sentinel-review.md",
|
|
19
|
-
"skills/sentinel-criteria.md",
|
|
20
|
-
"skills/sentinel-webapp-testing.md",
|
|
21
|
-
"skills/sentinel-frontend-design.md",
|
|
22
|
-
"skills/sentinel-web-artifacts-builder.md",
|
|
23
|
-
"skills/sentinel-algorithmic-art.md",
|
|
24
|
-
"skills/shared-claude-api.md"
|
|
25
|
-
],
|
|
26
|
-
"nexus": [
|
|
27
|
-
"skills/nexus-orchestration.md",
|
|
28
|
-
"skills/nexus-triage.md",
|
|
29
|
-
"skills/nexus-internal-comms.md",
|
|
30
|
-
"skills/nexus-doc-coauthoring.md",
|
|
31
|
-
"skills/nexus-skill-creator.md",
|
|
32
|
-
"skills/nexus-xlsx.md",
|
|
33
|
-
"skills/nexus-slack-gif-creator.md",
|
|
34
|
-
"skills/shared-claude-api.md"
|
|
35
|
-
],
|
|
36
|
-
"vessel": [
|
|
37
|
-
"skills/vessel-ci-gate.md",
|
|
38
|
-
"skills/vessel-merge-protocol.md",
|
|
39
|
-
"skills/vessel-webapp-testing.md",
|
|
40
|
-
"skills/vessel-internal-comms.md",
|
|
41
|
-
"skills/vessel-mcp-builder.md",
|
|
42
|
-
"skills/vessel-pdf.md",
|
|
43
|
-
"skills/shared-claude-api.md"
|
|
44
|
-
],
|
|
45
|
-
"lore": [
|
|
46
|
-
"skills/lore-documentation.md",
|
|
47
|
-
"skills/lore-changelog.md",
|
|
48
|
-
"skills/lore-doc-coauthoring.md",
|
|
49
|
-
"skills/lore-brand-guidelines.md",
|
|
50
|
-
"skills/lore-theme-factory.md",
|
|
51
|
-
"skills/lore-docx.md",
|
|
52
|
-
"skills/lore-pptx.md",
|
|
53
|
-
"skills/lore-xlsx.md",
|
|
54
|
-
"skills/lore-pdf.md",
|
|
55
|
-
"skills/shared-claude-api.md"
|
|
56
|
-
]
|
|
57
|
-
},
|
|
58
|
-
"hooks": {
|
|
59
|
-
"forge": "hooks/forge/",
|
|
60
|
-
"sentinel": "hooks/sentinel/",
|
|
61
|
-
"nexus": "hooks/nexus/",
|
|
62
|
-
"vessel": "hooks/vessel/",
|
|
63
|
-
"lore": "hooks/lore/"
|
|
64
|
-
},
|
|
65
|
-
"commands": "commands/"
|
|
66
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: algorithmic-art
|
|
3
|
-
description: Create generative, code-based art and visualizations using P5.JS and algorithmic principles.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# FORGE Algorithmic Art Skill
|
|
7
|
-
|
|
8
|
-
Use this skill to create unique, generative visual artifacts or to visualize complex data structures algorithmically.
|
|
9
|
-
|
|
10
|
-
## Algorithmic Philosophy
|
|
11
|
-
|
|
12
|
-
- **Conceptual Seed**: Start with a mathematical or natural phenomenon (e.g., "Voronoi Diagrams", "Lindenmayer Systems", "Fluid Dynamics").
|
|
13
|
-
- **Deduce Style**: Choose an aesthetic (e.g., Generative Minimalism, Digital Brutalism, Organic Complexity).
|
|
14
|
-
- **Technical Implementation**: Use P5.JS to implement the visual logic.
|
|
15
|
-
|
|
16
|
-
## Craftsmanship Requirements
|
|
17
|
-
|
|
18
|
-
- **Efficiency**: Favor procedural generation over static assets.
|
|
19
|
-
- **Interactivity**: Where appropriate, make the art responsive to user input.
|
|
20
|
-
- **Clean Code**: Structure your P5.JS scripts for readability and modularity.
|
|
21
|
-
|
|
22
|
-
## Output Format
|
|
23
|
-
|
|
24
|
-
Deliver your implementation in a self-contained HTML/JS artifact.
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: canvas-design
|
|
3
|
-
description: Visual philosophy and design principles for creating impactful visual content.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# FORGE Canvas Design Skill
|
|
7
|
-
|
|
8
|
-
Use this skill to establish a strong visual philosophy before creating visual artifacts, posters, or UI layouts.
|
|
9
|
-
|
|
10
|
-
## Visual Philosophy Creation
|
|
11
|
-
|
|
12
|
-
- **Deduce the Conceptual Seed**: What is the core idea? (e.g., "The Precision of a Swiss Watch", "The Organic Flow of Water").
|
|
13
|
-
- **Establish Principles**: define constraints (e.g., "Only 3 colors", "Strict Grid", "Asymmetric Balance").
|
|
14
|
-
- **Deduce Style**: Use specific visual descriptors (e.g., Brutalist, Geometric, Soft Minimalism).
|
|
15
|
-
|
|
16
|
-
## Essential Principles
|
|
17
|
-
|
|
18
|
-
- **Contrast**: Use size, color, and weight to create impact.
|
|
19
|
-
- **Hierarchy**: Guide the viewer's eye to the most important element first.
|
|
20
|
-
- **Negative Space**: Give your design room to breathe. Don't crowd the canvas.
|
|
21
|
-
- **Intentionality**: Every element must have a purpose. If it doesn't add value, remove it.
|
|
22
|
-
|
|
23
|
-
## Execution
|
|
24
|
-
|
|
25
|
-
Once the philosophy is established, apply it consistently across all components of the artifact.
|