deepspider 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (261) hide show
  1. package/.claude/agents/check.md +122 -0
  2. package/.claude/agents/debug.md +106 -0
  3. package/.claude/agents/dispatch.md +214 -0
  4. package/.claude/agents/implement.md +96 -0
  5. package/.claude/agents/plan.md +396 -0
  6. package/.claude/agents/research.md +120 -0
  7. package/.claude/commands/evolve/merge.md +80 -0
  8. package/.claude/commands/trellis/before-backend-dev.md +13 -0
  9. package/.claude/commands/trellis/before-frontend-dev.md +13 -0
  10. package/.claude/commands/trellis/break-loop.md +107 -0
  11. package/.claude/commands/trellis/check-backend.md +13 -0
  12. package/.claude/commands/trellis/check-cross-layer.md +153 -0
  13. package/.claude/commands/trellis/check-frontend.md +13 -0
  14. package/.claude/commands/trellis/create-command.md +154 -0
  15. package/.claude/commands/trellis/finish-work.md +129 -0
  16. package/.claude/commands/trellis/integrate-skill.md +219 -0
  17. package/.claude/commands/trellis/onboard.md +358 -0
  18. package/.claude/commands/trellis/parallel.md +193 -0
  19. package/.claude/commands/trellis/record-session.md +62 -0
  20. package/.claude/commands/trellis/start.md +280 -0
  21. package/.claude/commands/trellis/update-spec.md +213 -0
  22. package/.claude/hooks/inject-subagent-context.py +758 -0
  23. package/.claude/hooks/ralph-loop.py +374 -0
  24. package/.claude/hooks/session-start.py +126 -0
  25. package/.claude/settings.json +41 -0
  26. package/.claude/skills/deepagents-guide/SKILL.md +428 -0
  27. package/.cursor/commands/trellis-before-backend-dev.md +13 -0
  28. package/.cursor/commands/trellis-before-frontend-dev.md +13 -0
  29. package/.cursor/commands/trellis-break-loop.md +107 -0
  30. package/.cursor/commands/trellis-check-backend.md +13 -0
  31. package/.cursor/commands/trellis-check-cross-layer.md +153 -0
  32. package/.cursor/commands/trellis-check-frontend.md +13 -0
  33. package/.cursor/commands/trellis-create-command.md +154 -0
  34. package/.cursor/commands/trellis-finish-work.md +129 -0
  35. package/.cursor/commands/trellis-integrate-skill.md +219 -0
  36. package/.cursor/commands/trellis-onboard.md +358 -0
  37. package/.cursor/commands/trellis-record-session.md +62 -0
  38. package/.cursor/commands/trellis-start.md +156 -0
  39. package/.cursor/commands/trellis-update-spec.md +213 -0
  40. package/.env.example +11 -0
  41. package/.husky/pre-commit +1 -0
  42. package/.mcp.json +8 -0
  43. package/.trellis/.template-hashes.json +65 -0
  44. package/.trellis/.version +1 -0
  45. package/.trellis/scripts/add-session.sh +384 -0
  46. package/.trellis/scripts/common/developer.sh +129 -0
  47. package/.trellis/scripts/common/git-context.sh +263 -0
  48. package/.trellis/scripts/common/paths.sh +208 -0
  49. package/.trellis/scripts/common/phase.sh +150 -0
  50. package/.trellis/scripts/common/registry.sh +247 -0
  51. package/.trellis/scripts/common/task-queue.sh +142 -0
  52. package/.trellis/scripts/common/task-utils.sh +151 -0
  53. package/.trellis/scripts/common/worktree.sh +128 -0
  54. package/.trellis/scripts/create-bootstrap.sh +299 -0
  55. package/.trellis/scripts/get-context.sh +7 -0
  56. package/.trellis/scripts/get-developer.sh +15 -0
  57. package/.trellis/scripts/init-developer.sh +34 -0
  58. package/.trellis/scripts/multi-agent/cleanup.sh +396 -0
  59. package/.trellis/scripts/multi-agent/create-pr.sh +241 -0
  60. package/.trellis/scripts/multi-agent/plan.sh +207 -0
  61. package/.trellis/scripts/multi-agent/start.sh +310 -0
  62. package/.trellis/scripts/multi-agent/status.sh +828 -0
  63. package/.trellis/scripts/task.sh +1118 -0
  64. package/.trellis/spec/backend/deepagents-guide.md +337 -0
  65. package/.trellis/spec/backend/directory-structure.md +126 -0
  66. package/.trellis/spec/backend/examples/skills/deepagents-guide/README.md +11 -0
  67. package/.trellis/spec/backend/examples/skills/deepagents-guide/agent.js.template +20 -0
  68. package/.trellis/spec/backend/examples/skills/deepagents-guide/skills-config.js.template +13 -0
  69. package/.trellis/spec/backend/examples/skills/deepagents-guide/subagent.js.template +19 -0
  70. package/.trellis/spec/backend/hook-guidelines.md +178 -0
  71. package/.trellis/spec/backend/index.md +36 -0
  72. package/.trellis/spec/backend/quality-guidelines.md +201 -0
  73. package/.trellis/spec/backend/state-management.md +76 -0
  74. package/.trellis/spec/backend/tool-guidelines.md +144 -0
  75. package/.trellis/spec/backend/type-safety.md +71 -0
  76. package/.trellis/spec/guides/code-reuse-thinking-guide.md +92 -0
  77. package/.trellis/spec/guides/cross-layer-thinking-guide.md +94 -0
  78. package/.trellis/spec/guides/index.md +79 -0
  79. package/.trellis/tasks/archive/02-02-evolving-skills/prd.md +61 -0
  80. package/.trellis/tasks/archive/02-02-evolving-skills/task.json +29 -0
  81. package/.trellis/tasks/archive/2026-02/00-bootstrap-guidelines/prd.md +86 -0
  82. package/.trellis/tasks/archive/2026-02/00-bootstrap-guidelines/task.json +27 -0
  83. package/.trellis/tasks/archive/2026-02/02-02-skills-system/check.jsonl +3 -0
  84. package/.trellis/tasks/archive/2026-02/02-02-skills-system/debug.jsonl +2 -0
  85. package/.trellis/tasks/archive/2026-02/02-02-skills-system/implement.jsonl +5 -0
  86. package/.trellis/tasks/archive/2026-02/02-02-skills-system/prd.md +33 -0
  87. package/.trellis/tasks/archive/2026-02/02-02-skills-system/task.json +41 -0
  88. package/.trellis/workflow.md +407 -0
  89. package/.trellis/workspace/index.md +123 -0
  90. package/.trellis/workspace/pony/index.md +40 -0
  91. package/.trellis/workspace/pony/journal-1.md +7 -0
  92. package/.trellis/worktree.yaml +47 -0
  93. package/AGENTS.md +18 -0
  94. package/CLAUDE.md +292 -0
  95. package/README.md +134 -0
  96. package/agents/deepspider.md +142 -0
  97. package/docs/DEBUG.md +42 -0
  98. package/docs/GUIDE.md +334 -0
  99. package/docs/PROMPT.md +60 -0
  100. package/docs/USAGE.md +226 -0
  101. package/eslint.config.js +51 -0
  102. package/package.json +78 -0
  103. package/requirements-crypto.txt +14 -0
  104. package/src/agent/index.js +97 -0
  105. package/src/agent/logger.js +164 -0
  106. package/src/agent/middleware/filterTools.js +64 -0
  107. package/src/agent/middleware/report.js +79 -0
  108. package/src/agent/prompts/system.js +315 -0
  109. package/src/agent/run.js +575 -0
  110. package/src/agent/skills/anti-detect/SKILL.md +28 -0
  111. package/src/agent/skills/anti-detect/evolved.md +12 -0
  112. package/src/agent/skills/captcha/SKILL.md +37 -0
  113. package/src/agent/skills/captcha/evolved.md +12 -0
  114. package/src/agent/skills/config.js +30 -0
  115. package/src/agent/skills/crawler/SKILL.md +9 -0
  116. package/src/agent/skills/crawler/evolved.md +16 -0
  117. package/src/agent/skills/dynamic-analysis/SKILL.md +91 -0
  118. package/src/agent/skills/dynamic-analysis/evolved.md +12 -0
  119. package/src/agent/skills/env/SKILL.md +72 -0
  120. package/src/agent/skills/env/evolved.md +12 -0
  121. package/src/agent/skills/evolve.js +79 -0
  122. package/src/agent/skills/general/SKILL.md +12 -0
  123. package/src/agent/skills/general/evolved.md +12 -0
  124. package/src/agent/skills/js2python/SKILL.md +30 -0
  125. package/src/agent/skills/js2python/evolved.md +13 -0
  126. package/src/agent/skills/report/SKILL.md +21 -0
  127. package/src/agent/skills/report/evolved.md +12 -0
  128. package/src/agent/skills/sandbox/SKILL.md +22 -0
  129. package/src/agent/skills/sandbox/evolved.md +16 -0
  130. package/src/agent/skills/static-analysis/SKILL.md +93 -0
  131. package/src/agent/skills/static-analysis/evolved.md +12 -0
  132. package/src/agent/skills/xpath/SKILL.md +119 -0
  133. package/src/agent/subagents/anti-detect.js +45 -0
  134. package/src/agent/subagents/captcha.js +51 -0
  135. package/src/agent/subagents/crawler.js +138 -0
  136. package/src/agent/subagents/dynamic.js +64 -0
  137. package/src/agent/subagents/env-agent.js +82 -0
  138. package/src/agent/subagents/index.js +37 -0
  139. package/src/agent/subagents/js2python.js +72 -0
  140. package/src/agent/subagents/sandbox.js +55 -0
  141. package/src/agent/subagents/static.js +66 -0
  142. package/src/agent/tools/analysis.js +135 -0
  143. package/src/agent/tools/analyzer.js +85 -0
  144. package/src/agent/tools/anti-detect.js +89 -0
  145. package/src/agent/tools/antidebug.js +64 -0
  146. package/src/agent/tools/async.js +43 -0
  147. package/src/agent/tools/browser.js +324 -0
  148. package/src/agent/tools/captcha.js +223 -0
  149. package/src/agent/tools/capture.js +179 -0
  150. package/src/agent/tools/correlate.js +303 -0
  151. package/src/agent/tools/crawler.js +116 -0
  152. package/src/agent/tools/cryptohook.js +80 -0
  153. package/src/agent/tools/debug.js +246 -0
  154. package/src/agent/tools/deobfuscator.js +90 -0
  155. package/src/agent/tools/env.js +83 -0
  156. package/src/agent/tools/envdump.js +92 -0
  157. package/src/agent/tools/evolve.js +164 -0
  158. package/src/agent/tools/extract.js +114 -0
  159. package/src/agent/tools/extractor.js +54 -0
  160. package/src/agent/tools/file.js +224 -0
  161. package/src/agent/tools/hook.js +84 -0
  162. package/src/agent/tools/hookManager.js +178 -0
  163. package/src/agent/tools/index.js +137 -0
  164. package/src/agent/tools/nodejs.js +101 -0
  165. package/src/agent/tools/patch.js +46 -0
  166. package/src/agent/tools/preprocess.js +71 -0
  167. package/src/agent/tools/profile.js +122 -0
  168. package/src/agent/tools/python.js +627 -0
  169. package/src/agent/tools/report.js +124 -0
  170. package/src/agent/tools/runtime.js +132 -0
  171. package/src/agent/tools/sandbox.js +79 -0
  172. package/src/agent/tools/store.js +73 -0
  173. package/src/agent/tools/trace.js +74 -0
  174. package/src/agent/tools/tracing.js +201 -0
  175. package/src/agent/tools/utils.js +51 -0
  176. package/src/agent/tools/verify.js +184 -0
  177. package/src/agent/tools/webcrack.js +109 -0
  178. package/src/analyzer/ASTAnalyzer.js +387 -0
  179. package/src/analyzer/CallStackAnalyzer.js +379 -0
  180. package/src/analyzer/Deobfuscator.js +289 -0
  181. package/src/analyzer/EncryptionAnalyzer.js +99 -0
  182. package/src/analyzer/index.js +22 -0
  183. package/src/browser/EnvBridge.js +186 -0
  184. package/src/browser/cdp.js +168 -0
  185. package/src/browser/client.js +197 -0
  186. package/src/browser/collector.js +444 -0
  187. package/src/browser/collectors/RequestCryptoLinker.js +109 -0
  188. package/src/browser/collectors/ResponseSearcher.js +107 -0
  189. package/src/browser/collectors/ScriptCollector.js +158 -0
  190. package/src/browser/collectors/index.js +26 -0
  191. package/src/browser/defaultHooks.js +932 -0
  192. package/src/browser/hooks/crypto.js +55 -0
  193. package/src/browser/hooks/index.js +64 -0
  194. package/src/browser/hooks/native.js +9 -0
  195. package/src/browser/hooks/network.js +33 -0
  196. package/src/browser/index.js +42 -0
  197. package/src/browser/interceptors/NetworkInterceptor.js +116 -0
  198. package/src/browser/interceptors/ScriptInterceptor.js +76 -0
  199. package/src/browser/interceptors/index.js +6 -0
  200. package/src/browser/ui/analysisPanel.js +1782 -0
  201. package/src/browser/ui/confirmDialog.js +158 -0
  202. package/src/browser/ui/panel.html +152 -0
  203. package/src/browser/ui/selector.js +170 -0
  204. package/src/config/index.js +5 -0
  205. package/src/config/paths.js +71 -0
  206. package/src/config/patterns/crypto.js +36 -0
  207. package/src/config/profiles/chrome.json +71 -0
  208. package/src/config/profiles/firefox.json +44 -0
  209. package/src/config/profiles/safari.json +38 -0
  210. package/src/core/EnvMonitor.js +200 -0
  211. package/src/core/PatchGenerator.js +278 -0
  212. package/src/core/Sandbox.js +181 -0
  213. package/src/env/AntiAntiDebug.js +111 -0
  214. package/src/env/AsyncHook.js +68 -0
  215. package/src/env/BrowserAPIList.js +265 -0
  216. package/src/env/CookieHook.js +48 -0
  217. package/src/env/CryptoHook.js +205 -0
  218. package/src/env/EnvCodeGenerator.js +157 -0
  219. package/src/env/EnvDumper.js +356 -0
  220. package/src/env/EnvExtractor.js +220 -0
  221. package/src/env/HookBase.js +618 -0
  222. package/src/env/NetworkHook.js +159 -0
  223. package/src/env/modules/bom/history.js +29 -0
  224. package/src/env/modules/bom/location.js +26 -0
  225. package/src/env/modules/bom/navigator.js +70 -0
  226. package/src/env/modules/bom/screen.js +26 -0
  227. package/src/env/modules/bom/storage.js +23 -0
  228. package/src/env/modules/dom/document.js +110 -0
  229. package/src/env/modules/dom/event.js +51 -0
  230. package/src/env/modules/index.js +34 -0
  231. package/src/env/modules/webapi/fetch.js +46 -0
  232. package/src/env/modules/webapi/url.js +47 -0
  233. package/src/env/modules/webapi/xhr.js +48 -0
  234. package/src/index.js +27 -0
  235. package/src/mcp/server.js +89 -0
  236. package/src/store/DataStore.js +708 -0
  237. package/src/store/Store.js +158 -0
  238. package/src/store/Validator.js +24 -0
  239. package/test/analyze.test.js +90 -0
  240. package/test/envdump.test.js +74 -0
  241. package/test/flow.test.js +90 -0
  242. package/test/hooks.test.js +138 -0
  243. package/test/plugin.test.js +35 -0
  244. package/test/refactor-full.test.js +30 -0
  245. package/test/refactor.test.js +21 -0
  246. package/test/samples/obfuscated.js +61 -0
  247. package/test/samples/original.js +66 -0
  248. package/test/samples/v10_eval_chain.js +52 -0
  249. package/test/samples/v11_bytecode_vm.js +81 -0
  250. package/test/samples/v12_polymorphic.js +69 -0
  251. package/test/samples/v1_ob_basic.js +98 -0
  252. package/test/samples/v2_ob_advanced.js +99 -0
  253. package/test/samples/v3_jjencode.js +77 -0
  254. package/test/samples/v4_aaencode.js +73 -0
  255. package/test/samples/v5_control_flow.js +86 -0
  256. package/test/samples/v6_string_encryption.js +71 -0
  257. package/test/samples/v7_jsvmp.js +83 -0
  258. package/test/samples/v8_anti_debug.js +79 -0
  259. package/test/samples/v9_proxy_trap.js +49 -0
  260. package/test/samples.test.js +96 -0
  261. package/test/webcrack.test.js +55 -0
@@ -0,0 +1,128 @@
1
+ #!/bin/bash
2
+ # Worktree utilities for Multi-Agent Pipeline
3
+ #
4
+ # Usage: source this file in multi-agent scripts
5
+ # source "$(dirname "$0")/../common/worktree.sh"
6
+ #
7
+ # Provides:
8
+ # get_worktree_config - Get worktree.yaml path
9
+ # get_worktree_base_dir - Get worktree storage directory
10
+ # get_worktree_copy_files - Get files to copy list
11
+ # get_worktree_post_create_hooks - Get post-create hooks
12
+ # get_agents_dir - Get agents registry directory
13
+ #
14
+ # Requires: paths.sh (for get_repo_root)
15
+
16
+ # Ensure paths.sh is loaded
17
+ if ! type get_repo_root &>/dev/null; then
18
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
19
+ source "$SCRIPT_DIR/paths.sh"
20
+ fi
21
+
22
+ # =============================================================================
23
+ # Worktree Configuration
24
+ # =============================================================================
25
+
26
+ # Worktree config file relative path (relative to repo root)
27
+ WORKTREE_CONFIG_PATH="$DIR_WORKFLOW/worktree.yaml"
28
+
29
+ # Get worktree.yaml config file path
30
+ # Args: $1 - repo_root (optional)
31
+ # Returns: absolute path to config file
32
+ get_worktree_config() {
33
+ local repo_root="${1:-$(get_repo_root)}"
34
+ echo "$repo_root/$WORKTREE_CONFIG_PATH"
35
+ }
36
+
37
+ # Read simple value from worktree.yaml
38
+ # Args: $1 - key, $2 - config_file (optional)
39
+ # Returns: value
40
+ _yaml_get_value() {
41
+ local key="$1"
42
+ local config="${2:-$(get_worktree_config)}"
43
+ grep "^${key}:" "$config" 2>/dev/null | sed "s/^${key}:[[:space:]]*//" | tr -d '"' | tr -d "'"
44
+ }
45
+
46
+ # Read list from worktree.yaml
47
+ # Args: $1 - section, $2 - config_file (optional)
48
+ # Returns: list items (one per line)
49
+ _yaml_get_list() {
50
+ local section="$1"
51
+ local config="${2:-$(get_worktree_config)}"
52
+ local in_section=0
53
+
54
+ while IFS= read -r line; do
55
+ if [[ "$line" =~ ^${section}: ]]; then
56
+ in_section=1
57
+ continue
58
+ fi
59
+
60
+ if [ $in_section -eq 1 ]; then
61
+ # Exit when encountering new top-level key
62
+ if [[ "$line" =~ ^[a-z_]+: ]] && [[ ! "$line" =~ ^[[:space:]] ]]; then
63
+ break
64
+ fi
65
+ # Read list item
66
+ if [[ "$line" =~ ^[[:space:]]*-[[:space:]](.+)$ ]]; then
67
+ echo "${BASH_REMATCH[1]}" | tr -d '"' | tr -d "'"
68
+ fi
69
+ fi
70
+ done < "$config"
71
+ }
72
+
73
+ # Get worktree base directory
74
+ # Args: $1 - repo_root (optional)
75
+ # Returns: absolute path to worktree base directory
76
+ get_worktree_base_dir() {
77
+ local repo_root="${1:-$(get_repo_root)}"
78
+ local config=$(get_worktree_config "$repo_root")
79
+ local worktree_dir=$(_yaml_get_value "worktree_dir" "$config")
80
+
81
+ # Default value
82
+ if [ -z "$worktree_dir" ]; then
83
+ worktree_dir="../worktrees"
84
+ fi
85
+
86
+ # Handle relative path
87
+ if [[ "$worktree_dir" == ../* ]] || [[ "$worktree_dir" == ./* ]]; then
88
+ # Relative to repo_root
89
+ echo "$repo_root/$worktree_dir"
90
+ else
91
+ # Absolute path
92
+ echo "$worktree_dir"
93
+ fi
94
+ }
95
+
96
+ # Get files to copy list
97
+ # Args: $1 - repo_root (optional)
98
+ # Returns: file list (one per line)
99
+ get_worktree_copy_files() {
100
+ local repo_root="${1:-$(get_repo_root)}"
101
+ local config=$(get_worktree_config "$repo_root")
102
+ _yaml_get_list "copy" "$config"
103
+ }
104
+
105
+ # Get post_create hooks
106
+ # Args: $1 - repo_root (optional)
107
+ # Returns: command list (one per line)
108
+ get_worktree_post_create_hooks() {
109
+ local repo_root="${1:-$(get_repo_root)}"
110
+ local config=$(get_worktree_config "$repo_root")
111
+ _yaml_get_list "post_create" "$config"
112
+ }
113
+
114
+ # =============================================================================
115
+ # Agents Registry
116
+ # =============================================================================
117
+
118
+ # Get agents directory for current developer
119
+ # Args: $1 - repo_root (optional)
120
+ # Returns: absolute path to agents directory
121
+ get_agents_dir() {
122
+ local repo_root="${1:-$(get_repo_root)}"
123
+ local workspace_dir=$(get_workspace_dir "$repo_root")
124
+
125
+ if [[ -n "$workspace_dir" ]]; then
126
+ echo "$workspace_dir/.agents"
127
+ fi
128
+ }
@@ -0,0 +1,299 @@
1
+ #!/bin/bash
2
+ # Create Bootstrap Task for First-Time Setup
3
+ #
4
+ # Creates a guided task to help users fill in project guidelines
5
+ # after initializing Trellis for the first time.
6
+ #
7
+ # Usage:
8
+ # ./.trellis/scripts/create-bootstrap.sh [project-type]
9
+ #
10
+ # Arguments:
11
+ # project-type: frontend | backend | fullstack (default: fullstack)
12
+ #
13
+ # Prerequisites:
14
+ # - .trellis/.developer must exist (run init-developer.sh first)
15
+ #
16
+ # Creates:
17
+ # .trellis/tasks/00-bootstrap-guidelines/
18
+ # ├── task.json # Task metadata
19
+ # └── prd.md # Task description and guidance
20
+
21
+ set -e
22
+
23
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
24
+ source "$SCRIPT_DIR/common/paths.sh"
25
+ source "$SCRIPT_DIR/common/developer.sh"
26
+
27
+ # Colors
28
+ RED='\033[0;31m'
29
+ GREEN='\033[0;32m'
30
+ YELLOW='\033[1;33m'
31
+ BLUE='\033[0;34m'
32
+ NC='\033[0m'
33
+
34
+ TASK_NAME="00-bootstrap-guidelines"
35
+
36
+ # Project type (default: fullstack)
37
+ PROJECT_TYPE="${1:-fullstack}"
38
+
39
+ # Validate project type
40
+ case "$PROJECT_TYPE" in
41
+ frontend|backend|fullstack)
42
+ ;;
43
+ *)
44
+ echo -e "${YELLOW}Unknown project type: $PROJECT_TYPE, defaulting to fullstack${NC}"
45
+ PROJECT_TYPE="fullstack"
46
+ ;;
47
+ esac
48
+
49
+ # =============================================================================
50
+ # PRD Content
51
+ # =============================================================================
52
+
53
+ write_prd_header() {
54
+ cat << 'EOF'
55
+ # Bootstrap: Fill Project Development Guidelines
56
+
57
+ ## Purpose
58
+
59
+ Welcome to Trellis! This is your first task.
60
+
61
+ AI agents use `.trellis/spec/` to understand YOUR project's coding conventions.
62
+ **Empty templates = AI writes generic code that doesn't match your project style.**
63
+
64
+ Filling these guidelines is a one-time setup that pays off for every future AI session.
65
+
66
+ ---
67
+
68
+ ## Your Task
69
+
70
+ Fill in the guideline files based on your **existing codebase**.
71
+ EOF
72
+ }
73
+
74
+ write_prd_backend_section() {
75
+ cat << 'EOF'
76
+
77
+ ### Backend Guidelines
78
+
79
+ | File | What to Document |
80
+ |------|------------------|
81
+ | `.trellis/spec/backend/directory-structure.md` | Where different file types go (routes, services, utils) |
82
+ | `.trellis/spec/backend/database-guidelines.md` | ORM, migrations, query patterns, naming conventions |
83
+ | `.trellis/spec/backend/error-handling.md` | How errors are caught, logged, and returned |
84
+ | `.trellis/spec/backend/logging-guidelines.md` | Log levels, format, what to log |
85
+ | `.trellis/spec/backend/quality-guidelines.md` | Code review standards, testing requirements |
86
+ EOF
87
+ }
88
+
89
+ write_prd_frontend_section() {
90
+ cat << 'EOF'
91
+
92
+ ### Frontend Guidelines
93
+
94
+ | File | What to Document |
95
+ |------|------------------|
96
+ | `.trellis/spec/frontend/directory-structure.md` | Component/page/hook organization |
97
+ | `.trellis/spec/frontend/component-guidelines.md` | Component patterns, props conventions |
98
+ | `.trellis/spec/frontend/hook-guidelines.md` | Custom hook naming, patterns |
99
+ | `.trellis/spec/frontend/state-management.md` | State library, patterns, what goes where |
100
+ | `.trellis/spec/frontend/type-safety.md` | TypeScript conventions, type organization |
101
+ | `.trellis/spec/frontend/quality-guidelines.md` | Linting, testing, accessibility |
102
+ EOF
103
+ }
104
+
105
+ write_prd_footer() {
106
+ cat << 'EOF'
107
+
108
+ ### Thinking Guides (Optional)
109
+
110
+ The `.trellis/spec/guides/` directory contains thinking guides that are already
111
+ filled with general best practices. You can customize them for your project if needed.
112
+
113
+ ---
114
+
115
+ ## How to Fill Guidelines
116
+
117
+ ### Principle: Document Reality, Not Ideals
118
+
119
+ Write what your codebase **actually does**, not what you wish it did.
120
+ AI needs to match existing patterns, not introduce new ones.
121
+
122
+ ### Steps
123
+
124
+ 1. **Look at existing code** - Find 2-3 examples of each pattern
125
+ 2. **Document the pattern** - Describe what you see
126
+ 3. **Include file paths** - Reference real files as examples
127
+ 4. **List anti-patterns** - What does your team avoid?
128
+
129
+ ---
130
+
131
+ ## Tips for Using AI
132
+
133
+ Ask AI to help analyze your codebase:
134
+
135
+ - "Look at my codebase and document the patterns you see"
136
+ - "Analyze my code structure and summarize the conventions"
137
+ - "Find error handling patterns and document them"
138
+
139
+ The AI will read your code and help you document it.
140
+
141
+ ---
142
+
143
+ ## Completion Checklist
144
+
145
+ - [ ] Guidelines filled for your project type
146
+ - [ ] At least 2-3 real code examples in each guideline
147
+ - [ ] Anti-patterns documented
148
+
149
+ When done:
150
+
151
+ ```bash
152
+ ./.trellis/scripts/task.sh finish
153
+ ./.trellis/scripts/task.sh archive 00-bootstrap-guidelines
154
+ ```
155
+
156
+ ---
157
+
158
+ ## Why This Matters
159
+
160
+ After completing this task:
161
+
162
+ 1. AI will write code that matches your project style
163
+ 2. Relevant `/trellis:before-*-dev` commands will inject real context
164
+ 3. `/trellis:check-*` commands will validate against your actual standards
165
+ 4. Future developers (human or AI) will onboard faster
166
+ EOF
167
+ }
168
+
169
+ write_prd() {
170
+ local dir="$1"
171
+ local project_type="$2"
172
+
173
+ {
174
+ write_prd_header
175
+
176
+ case "$project_type" in
177
+ frontend)
178
+ write_prd_frontend_section
179
+ ;;
180
+ backend)
181
+ write_prd_backend_section
182
+ ;;
183
+ fullstack)
184
+ write_prd_backend_section
185
+ write_prd_frontend_section
186
+ ;;
187
+ esac
188
+
189
+ write_prd_footer
190
+ } > "$dir/prd.md"
191
+ }
192
+
193
+ # =============================================================================
194
+ # Task JSON
195
+ # =============================================================================
196
+
197
+ write_task_json() {
198
+ local dir="$1"
199
+ local developer="$2"
200
+ local project_type="$3"
201
+ local today=$(date +%Y-%m-%d)
202
+
203
+ # Generate subtasks based on project type
204
+ local subtasks
205
+ local related_files
206
+
207
+ case "$project_type" in
208
+ frontend)
209
+ subtasks='[
210
+ {"name": "Fill frontend guidelines", "status": "pending"},
211
+ {"name": "Add code examples", "status": "pending"}
212
+ ]'
213
+ related_files='[
214
+ ".trellis/spec/frontend/"
215
+ ]'
216
+ ;;
217
+ backend)
218
+ subtasks='[
219
+ {"name": "Fill backend guidelines", "status": "pending"},
220
+ {"name": "Add code examples", "status": "pending"}
221
+ ]'
222
+ related_files='[
223
+ ".trellis/spec/backend/"
224
+ ]'
225
+ ;;
226
+ fullstack)
227
+ subtasks='[
228
+ {"name": "Fill backend guidelines", "status": "pending"},
229
+ {"name": "Fill frontend guidelines", "status": "pending"},
230
+ {"name": "Add code examples", "status": "pending"}
231
+ ]'
232
+ related_files='[
233
+ ".trellis/spec/backend/",
234
+ ".trellis/spec/frontend/"
235
+ ]'
236
+ ;;
237
+ esac
238
+
239
+ cat > "$dir/task.json" << EOF
240
+ {
241
+ "id": "$TASK_NAME",
242
+ "name": "Bootstrap Guidelines",
243
+ "description": "Fill in project development guidelines for AI agents",
244
+ "status": "in_progress",
245
+ "dev_type": "docs",
246
+ "priority": "P1",
247
+ "creator": "$developer",
248
+ "assignee": "$developer",
249
+ "createdAt": "$today",
250
+ "completedAt": null,
251
+ "commit": null,
252
+ "subtasks": $subtasks,
253
+ "relatedFiles": $related_files,
254
+ "notes": "First-time setup task created by trellis init ($project_type project)"
255
+ }
256
+ EOF
257
+ }
258
+
259
+ # =============================================================================
260
+ # Main
261
+ # =============================================================================
262
+
263
+ main() {
264
+ local repo_root=$(get_repo_root)
265
+ local developer=$(get_developer "$repo_root")
266
+
267
+ # Check developer initialized
268
+ if [[ -z "$developer" ]]; then
269
+ echo -e "${RED}Error: Developer not initialized${NC}"
270
+ echo "Run: ./$DIR_WORKFLOW/$DIR_SCRIPTS/init-developer.sh <your-name>"
271
+ exit 1
272
+ fi
273
+
274
+ local tasks_dir=$(get_tasks_dir "$repo_root")
275
+ local task_dir="$tasks_dir/$TASK_NAME"
276
+ local relative_path="$DIR_WORKFLOW/$DIR_TASKS/$TASK_NAME"
277
+
278
+ # Check if already exists
279
+ if [[ -d "$task_dir" ]]; then
280
+ echo -e "${YELLOW}Bootstrap task already exists: $relative_path${NC}"
281
+ exit 0
282
+ fi
283
+
284
+ # Create task directory
285
+ mkdir -p "$task_dir"
286
+
287
+ # Write files
288
+ write_task_json "$task_dir" "$developer" "$PROJECT_TYPE"
289
+ write_prd "$task_dir" "$PROJECT_TYPE"
290
+
291
+ # Set as current task
292
+ set_current_task "$relative_path" "$repo_root"
293
+
294
+ # Silent output - init command handles user-facing messages
295
+ # Only output the task path for programmatic use
296
+ echo "$relative_path"
297
+ }
298
+
299
+ main "$@"
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ # Get Session Context for AI Agent
3
+ #
4
+ # This is a wrapper that calls the actual implementation in common/git-context.sh
5
+
6
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7
+ exec "$SCRIPT_DIR/common/git-context.sh" "$@"
@@ -0,0 +1,15 @@
1
+ #!/bin/bash
2
+ # Get current developer name
3
+ #
4
+ # This is a wrapper that uses common/paths.sh
5
+
6
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
7
+ source "$SCRIPT_DIR/common/paths.sh"
8
+
9
+ developer=$(get_developer)
10
+ if [[ -n "$developer" ]]; then
11
+ echo "$developer"
12
+ else
13
+ echo "Developer not initialized" >&2
14
+ exit 1
15
+ fi
@@ -0,0 +1,34 @@
1
+ #!/bin/bash
2
+ # Initialize developer for workflow
3
+ #
4
+ # Usage:
5
+ # ./.trellis/scripts/init-developer.sh <developer-name>
6
+ #
7
+ # This creates:
8
+ # - .trellis/.developer file with developer info
9
+ # - .trellis/workspace/<name>/ directory structure
10
+
11
+ set -e
12
+
13
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
14
+ source "$SCRIPT_DIR/common/paths.sh"
15
+ source "$SCRIPT_DIR/common/developer.sh"
16
+
17
+ if [[ -z "$1" ]]; then
18
+ echo "Usage: $0 <developer-name>"
19
+ echo ""
20
+ echo "Example:"
21
+ echo " $0 john"
22
+ exit 1
23
+ fi
24
+
25
+ # Check if already initialized
26
+ existing=$(get_developer)
27
+ if [[ -n "$existing" ]]; then
28
+ echo "Developer already initialized: $existing"
29
+ echo ""
30
+ echo "To reinitialize, remove $DIR_WORKFLOW/$FILE_DEVELOPER first"
31
+ exit 0
32
+ fi
33
+
34
+ init_developer "$1"