@shulex/cxclawctl 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/README.md +25 -22
  2. package/capabilities.lock.json +535 -131
  3. package/dist/cli.js +2203 -127
  4. package/dist/cli.js.map +1 -1
  5. package/package.json +20 -6
  6. package/requirements-cli.txt +0 -2
  7. package/skills/__lib__/__init__.py +0 -0
  8. package/skills/__lib__/skill-runtime/bootstrap.py +0 -134
  9. package/skills/__lib__/solvea-api/__init__.py +0 -0
  10. package/skills/__lib__/solvea-api/client.py +0 -1944
  11. package/skills/__lib__/solvea-api/dashboard.py +0 -100
  12. package/skills/__lib__/solvea-api/solvea_api.py +0 -1341
  13. package/skills/agent-analytics/SKILL.md +0 -74
  14. package/skills/agent-analytics/references/chat-report-fields.md +0 -36
  15. package/skills/agent-analytics/references/report-fields.md +0 -130
  16. package/skills/agent-analytics/references/transcript.md +0 -110
  17. package/skills/agent-builder/SKILL.md +0 -42
  18. package/skills/agent-builder/interfaces/fallback-chatflow.md +0 -47
  19. package/skills/agent-builder/references/chatflow/graph-spec.md +0 -259
  20. package/skills/agent-builder/references/chatflow/node-selection.md +0 -89
  21. package/skills/agent-builder/references/chatflow/nodes/agent.md +0 -350
  22. package/skills/agent-builder/references/chatflow/nodes/business-track.md +0 -43
  23. package/skills/agent-builder/references/chatflow/nodes/code.md +0 -157
  24. package/skills/agent-builder/references/chatflow/nodes/collect-order.md +0 -47
  25. package/skills/agent-builder/references/chatflow/nodes/finish.md +0 -34
  26. package/skills/agent-builder/references/chatflow/nodes/human-review.md +0 -60
  27. package/skills/agent-builder/references/chatflow/nodes/if-else.md +0 -100
  28. package/skills/agent-builder/references/chatflow/nodes/intent.md +0 -79
  29. package/skills/agent-builder/references/chatflow/nodes/knowledge-reply.md +0 -43
  30. package/skills/agent-builder/references/chatflow/nodes/llm.md +0 -117
  31. package/skills/agent-builder/references/chatflow/nodes/note.md +0 -38
  32. package/skills/agent-builder/references/chatflow/nodes/question.md +0 -97
  33. package/skills/agent-builder/references/chatflow/nodes/rag-reply.md +0 -68
  34. package/skills/agent-builder/references/chatflow/nodes/reply.md +0 -97
  35. package/skills/agent-builder/references/chatflow/nodes/start.md +0 -35
  36. package/skills/agent-builder/references/chatflow/nodes/sub-graph.md +0 -48
  37. package/skills/agent-builder/references/chatflow/nodes/tool.md +0 -138
  38. package/skills/agent-builder/references/chatflow/nodes/transfer-to-human.md +0 -63
  39. package/skills/agent-builder/references/chatflow/nodes/variable-assignment.md +0 -52
  40. package/skills/agent-builder/references/chatflow/nodes/variable-extract.md +0 -50
  41. package/skills/agent-builder/references/chatflow/nodes/variable-process.md +0 -70
  42. package/skills/agent-builder/references/chatflow/overview.md +0 -53
  43. package/skills/agent-builder/references/chatflow/visual-translation.md +0 -64
  44. package/skills/agent-builder/references/chatflow/workflow.md +0 -134
  45. package/skills/agent-builder/references/multi-agent/create-update.md +0 -185
  46. package/skills/agent-builder/references/multi-agent/graph-spec.md +0 -246
  47. package/skills/agent-builder/references/multi-agent/graph-structure.md +0 -12
  48. package/skills/agent-builder/references/multi-agent/migrate-to-chatflow.md +0 -13
  49. package/skills/agent-builder/references/multi-agent/migration/large.md +0 -554
  50. package/skills/agent-builder/references/multi-agent/migration/principles.md +0 -446
  51. package/skills/agent-builder/references/multi-agent/migration/small.md +0 -225
  52. package/skills/agent-builder/references/multi-agent/orchestration.md +0 -11
  53. package/skills/agent-builder/references/multi-agent/overview.md +0 -48
  54. package/skills/agent-builder/references/multi-agent/update.md +0 -128
  55. package/skills/agent-builder/references/multi-agent/workflow.md +0 -87
  56. package/skills/agent-builder/references/single-agent/overview.md +0 -48
  57. package/skills/agent-builder/references/single-agent/prompt.md +0 -16
  58. package/skills/agent-builder/references/single-agent/tools.md +0 -36
  59. package/skills/agent-builder/references/single-agent/voice.md +0 -46
  60. package/skills/agent-builder/references/tools/http-tool.md +0 -315
  61. package/skills/agent-builder/references/tools/mock-tool.md +0 -279
  62. package/skills/agent-builder/references/tools/overview.md +0 -46
  63. package/skills/agent-builder/references/tools/tool-config.md +0 -43
  64. package/skills/agent-builder/references/tools/x-token.md +0 -34
  65. package/skills/agent-builder/scripts/chatflow/chatflow_builder.py +0 -3458
  66. package/skills/agent-builder/scripts/chatflow/validate_graph.py +0 -1697
  67. package/skills/agent-builder/scripts/copy_marketplace_agent.py +0 -61
  68. package/skills/agent-builder/scripts/multi-agent/legacy_graph_analyzer.py +0 -5974
  69. package/skills/agent-builder/scripts/multi-agent/replay_compare.py +0 -679
  70. package/skills/agent-builder/scripts/patch_agent_tools.py +0 -135
  71. package/skills/agent-builder/scripts/tools/validate_tool_config.py +0 -384
  72. package/skills/agent-tester/SKILL.md +0 -35
  73. package/skills/agent-tester/batch-test/overview.md +0 -86
  74. package/skills/agent-tester/scripts/batch_test_sheet.py +0 -213
  75. package/skills/agent-tester/single-test/badcase-retest.md +0 -85
  76. package/skills/agent-tester/single-test/direct-test.md +0 -24
  77. package/skills/agent-tester/single-test/overview.md +0 -142
  78. package/skills/delivery/SKILL.md +0 -112
  79. package/skills/delivery/interfaces/classify.md +0 -38
  80. package/skills/delivery/interfaces/create-agents.md +0 -89
  81. package/skills/delivery/interfaces/delivery-test.md +0 -67
  82. package/skills/delivery/references/flow.md +0 -40
  83. package/skills/delivery/references/validation.md +0 -15
  84. package/skills/delivery/scripts/batch_test.py +0 -704
  85. package/skills/delivery/scripts/classify.py +0 -22
  86. package/skills/delivery/scripts/create_agents.py +0 -695
  87. package/skills/delivery/scripts/gen_delivery_report.py +0 -335
  88. package/skills/delivery/scripts/gen_excel.py +0 -234
  89. package/skills/delivery/scripts/gen_report.py +0 -208
  90. package/skills/delivery/scripts/plan.py +0 -163
  91. package/skills/delivery/scripts/render.py +0 -713
  92. package/skills/delivery/scripts/render_summary.py +0 -38
  93. package/skills/delivery/scripts/sample_history_cases.py +0 -109
  94. package/skills/kb-builder/SKILL.md +0 -80
  95. package/skills/kb-builder/interfaces/qa-upload.md +0 -55
  96. package/skills/kb-builder/interfaces/web-kb.md +0 -84
  97. package/skills/kb-builder/references/directory.md +0 -373
  98. package/skills/kb-builder/references/export.md +0 -282
  99. package/skills/kb-builder/references/isolation-keywords.md +0 -113
  100. package/skills/kb-builder/references/knowledge.md +0 -153
  101. package/skills/kb-builder/references/product.md +0 -52
  102. package/skills/kb-builder/references/qa-from-help-center.md +0 -58
  103. package/skills/kb-builder/references/qa-from-pdf.md +0 -94
  104. package/skills/kb-builder/references/qa-from-tickets.md +0 -168
  105. package/skills/kb-builder/references/qa-from-web.md +0 -98
  106. package/skills/kb-builder/references/qa-quality.md +0 -73
  107. package/skills/kb-builder/references/reply-template.md +0 -237
  108. package/skills/kb-builder/references/tag-isolation-migration.md +0 -61
  109. package/skills/kb-builder/references/tags.md +0 -45
  110. package/skills/kb-builder/references/upload.md +0 -130
  111. package/skills/kb-builder/scripts/batch_extract_ticket_qa.py +0 -333
  112. package/skills/kb-builder/scripts/build_directory_plan.py +0 -144
  113. package/skills/kb-builder/scripts/crawl_site.py +0 -433
  114. package/skills/kb-builder/scripts/create_dirs.py +0 -146
  115. package/skills/kb-builder/scripts/export_knowledge.py +0 -454
  116. package/skills/kb-builder/scripts/extract_ticket_qa.py +0 -441
  117. package/skills/kb-builder/scripts/extract_web_qa.py +0 -118
  118. package/skills/kb-builder/scripts/import_qa.py +0 -219
  119. package/skills/kb-builder/scripts/import_source_documents.py +0 -143
  120. package/skills/kb-builder/scripts/import_templates.py +0 -409
  121. package/skills/poc/SKILL.md +0 -125
  122. package/skills/poc/assets/default_manual.css +0 -279
  123. package/skills/poc/assets/notice_escalate.png +0 -0
  124. package/skills/poc/assets/notice_escalate2.png +0 -0
  125. package/skills/poc/assets/notice_new_chat.png +0 -0
  126. package/skills/poc/assets/poc_test_template.html +0 -645
  127. package/skills/poc/assets/poc_test_template.md +0 -104
  128. package/skills/poc/assets/step3_preview.png +0 -0
  129. package/skills/poc/assets/step4_order_note.png +0 -0
  130. package/skills/poc/interfaces/classify.md +0 -38
  131. package/skills/poc/interfaces/create-agents.md +0 -108
  132. package/skills/poc/interfaces/poc-test.md +0 -94
  133. package/skills/poc/references/flow.md +0 -47
  134. package/skills/poc/references/kb-directory.md +0 -22
  135. package/skills/poc/references/validation.md +0 -17
  136. package/skills/poc/scripts/classify.py +0 -22
  137. package/skills/poc/scripts/create_agents.py +0 -818
  138. package/skills/poc/scripts/gen_excel.py +0 -234
  139. package/skills/poc/scripts/gen_poc_manual.py +0 -249
  140. package/skills/poc/scripts/gen_report.py +0 -208
  141. package/skills/poc/scripts/inspect_chatflow.py +0 -209
  142. package/skills/poc/scripts/plan.py +0 -178
  143. package/skills/poc/scripts/poc_test.py +0 -495
  144. package/skills/poc/scripts/render.py +0 -713
  145. package/skills/poc/scripts/render_summary.py +0 -41
  146. package/skills/runtime-inspector/SKILL.md +0 -51
  147. package/skills/runtime-inspector/references/frontend-rendering.md +0 -126
  148. package/skills/runtime-inspector/references/model.md +0 -59
  149. package/skills/runtime-inspector/references/sandbox.md +0 -131
  150. package/skills/runtime-inspector/scripts/model_inspect.py +0 -68
  151. package/skills/runtime-inspector/scripts/prepare.py +0 -98
  152. package/skills/runtime-inspector/scripts/process.py +0 -84
  153. package/skills/runtime-inspector/scripts/read_state.py +0 -32
  154. package/skills/runtime-inspector/scripts/sandbox_inspect.py +0 -463
  155. package/skills/runtime-inspector/scripts/test_claude_proxy.py +0 -49
  156. package/skills/runtime-inspector/scripts/test_openai_proxy.py +0 -41
  157. package/skills/runtime-inspector/scripts/verify_persistence.py +0 -101
  158. package/skills/runtime-inspector/scripts/write_test.py +0 -41
  159. package/skills/setup/SKILL.md +0 -17
  160. package/skills/shulex-support/SKILL.md +0 -39
  161. package/skills/shulex-support/references/badcase-analysis/overview.md +0 -34
  162. package/skills/shulex-support/references/badcase-analysis/text/conversation-record.md +0 -105
  163. package/skills/shulex-support/references/badcase-analysis/text/core-flow.md +0 -89
  164. package/skills/shulex-support/references/badcase-analysis/text/log-query-rules.md +0 -36
  165. package/skills/shulex-support/references/badcase-analysis/text/m1-entry.md +0 -53
  166. package/skills/shulex-support/references/badcase-analysis/text/m10-chatflow-service.md +0 -259
  167. package/skills/shulex-support/references/badcase-analysis/text/m11-algorithm-service.md +0 -148
  168. package/skills/shulex-support/references/badcase-analysis/text/m12-quality-inspection.md +0 -57
  169. package/skills/shulex-support/references/badcase-analysis/text/m2-intent.md +0 -120
  170. package/skills/shulex-support/references/badcase-analysis/text/m3-strategy.md +0 -126
  171. package/skills/shulex-support/references/badcase-analysis/text/m4-aifield.md +0 -121
  172. package/skills/shulex-support/references/badcase-analysis/text/m5-agent.md +0 -208
  173. package/skills/shulex-support/references/badcase-analysis/text/m6-tool.md +0 -115
  174. package/skills/shulex-support/references/badcase-analysis/text/m7-reply.md +0 -72
  175. package/skills/shulex-support/references/badcase-analysis/text/m8-error.md +0 -92
  176. package/skills/shulex-support/references/badcase-analysis/text/m9-knowledge-search.md +0 -147
  177. package/skills/shulex-support/references/badcase-analysis/text/sls-query.md +0 -283
  178. package/skills/shulex-support/references/badcase-analysis/voice/core-flow.md +0 -77
  179. package/skills/shulex-support/references/badcase-analysis/voice/dependencies.md +0 -19
  180. package/skills/shulex-support/references/badcase-analysis/voice/platform-api.md +0 -23
  181. package/skills/shulex-support/references/badcase-analysis/voice/sls-playbook.md +0 -31
  182. package/skills/shulex-support/references/product-docs.md +0 -70
  183. package/skills/shulex-support/references/tickets.md +0 -184
  184. package/skills/shulex-support/scripts/support.py +0 -427
  185. package/skills/solvea-desk/SKILL.md +0 -39
  186. package/skills/solvea-desk/references/report/fields.md +0 -82
  187. package/skills/solvea-desk/references/report/report-design.md +0 -200
  188. package/skills/solvea-desk/references/report/report-template.html +0 -44
  189. package/skills/solvea-desk/references/report/report.css +0 -517
  190. package/skills/solvea-desk/references/report/workflow.md +0 -464
  191. package/skills/solvea-desk/references/tickets/query.md +0 -103
  192. package/skills/solvea-desk/references/tickets/tags.md +0 -83
  193. package/skills/solvea-desk/scripts/report/fetch_sources.py +0 -580
  194. package/skills/solvea-desk/scripts/report/render_report.py +0 -763
  195. package/skills/solvea-desk/scripts/tickets/desk_api.py +0 -73
  196. package/skills/solvea-desk/scripts/tickets/fetch_tickets.py +0 -403
  197. package/skills/solvea-desk/scripts/tickets/ticket_tags.py +0 -305
  198. package/skills/solvea-kit/SKILL.md +0 -84
  199. package/skills/solvea-kit/references/agent.md +0 -145
  200. package/skills/solvea-kit/references/chat.md +0 -244
  201. package/skills/solvea-kit/references/intent.md +0 -69
  202. package/skills/solvea-kit/references/plugin.md +0 -53
  203. package/skills/solvea-kit/references/quality-inspection.md +0 -75
  204. package/skills/solvea-kit/references/strategy.md +0 -62
  205. package/skills/solvea-kit/references/tagging.md +0 -231
  206. package/skills/solvea-kit/references/variables.md +0 -53
  207. package/skills/solvea-kit/scripts/generate_label_import_file.py +0 -151
  208. package/skills/solvea-kit/scripts/intent_classify.py +0 -843
package/package.json CHANGED
@@ -1,26 +1,37 @@
1
1
  {
2
2
  "name": "@shulex/cxclawctl",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "description": "Solvea CXClaw CLI and Codex plugin runtime",
5
5
  "type": "module",
6
- "bin": { "cxclawctl": "./bin/cxclawctl.mjs" },
7
- "files": ["bin", "dist/cli.js", "dist/cli.js.map", "skills", "capabilities.lock.json", "requirements-cli.txt"],
6
+ "bin": {
7
+ "cxclawctl": "./bin/cxclawctl.mjs"
8
+ },
9
+ "files": [
10
+ "bin",
11
+ "dist/cli.js",
12
+ "dist/cli.js.map",
13
+ "capabilities.lock.json"
14
+ ],
8
15
  "scripts": {
9
16
  "build": "tsup",
10
17
  "dev": "tsx src/cli.ts",
11
18
  "typecheck": "tsc --noEmit",
12
19
  "test": "bun test --path-ignore-patterns _tmp_",
13
- "check:capabilities": "python3 scripts/check_capabilities.py",
20
+ "check:capabilities": "tsx scripts/check-capabilities.ts",
14
21
  "check:release": "tsx scripts/check-release.ts",
22
+ "test:package": "tsx scripts/test-packed-package.ts",
15
23
  "release:prepare": "tsx scripts/prepare-release.ts",
16
24
  "package:agent-plugin": "node scripts/package-agent-plugin.mjs",
17
25
  "package:codex-plugin": "node scripts/package-codex-plugin.mjs"
18
26
  },
19
- "engines": { "node": ">=22" },
27
+ "engines": {
28
+ "node": ">=22"
29
+ },
20
30
  "dependencies": {
21
31
  "@alicloud/log": "^1.2.6",
22
32
  "@napi-rs/keyring": "^2.1.2",
23
33
  "compare-versions": "^6.1.1",
34
+ "exceljs": "^4.4.0",
24
35
  "open": "^10.2.0"
25
36
  },
26
37
  "devDependencies": {
@@ -30,6 +41,9 @@
30
41
  "tsx": "^4.21.0",
31
42
  "typescript": "^5.9.0"
32
43
  },
33
- "repository": { "type": "git", "url": "git+https://github.com/SolveaCX/cx_claw_codex.git" },
44
+ "repository": {
45
+ "type": "git",
46
+ "url": "git+https://github.com/SolveaCX/cx_claw_codex.git"
47
+ },
34
48
  "license": "UNLICENSED"
35
49
  }
@@ -1,2 +0,0 @@
1
- httpx==0.28.1
2
- boto3==1.40.58
File without changes
@@ -1,134 +0,0 @@
1
- """
2
- Skill runtime bootstrap — two lines at the top of every skill script:
3
-
4
- import os, sys
5
- sys.path.insert(0, os.path.join(os.environ["SOLVEA_LIB_DIR"], "skill-runtime"))
6
- from bootstrap import *
7
-
8
- After import, the following are available:
9
- SKILL_NAME — inferred from the skill directory above scripts/
10
- WORKSPACE — absolute Path to workspace/ (from $WORKSPACE_DIR, or relative fallback)
11
- OUTPUTS_DIR — WORKSPACE / outputs / {skill_name} # 跨轮路径稳定,下轮直接可读
12
- STATE_DIR — WORKSPACE / state / {skill_name} # 跨轮路径稳定,下轮直接可读
13
- TMP_DIR — WORKSPACE / tmp / {skill_name} # 仅本轮有效
14
- MOUNTED_USER — .../mounted/chat-files/user # 用户上传,lazy
15
- MOUNTED_TENANT — .../mounted/tenant-files # 租户级共享,lazy
16
- SOLVEA_TENANT_ID — tenant ID (from $SOLVEA_TENANT_ID)
17
- SOLVEA_PROJECT_ID — Solvea project ID (from $SOLVEA_PROJECT_ID)
18
- SOLVEA_ENV — "prod" or "staging" (from $SOLVEA_ENV)
19
- timestamp() — str e.g. "20260422_143022"
20
-
21
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
22
- SKILL 脚本开发规范
23
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
24
-
25
- 【写入】脚本只能写 workspace/ 下的路径:
26
- - 输出文件 → OUTPUTS_DIR / f"name_{timestamp()}.ext" # 每轮新建,带时间戳
27
- - 临时文件 → TMP_DIR / "tmp_name.ext"
28
- - 状态文件 → STATE_DIR / "progress.json" # 固定名(有语义),每轮覆盖
29
- 所有目录在使用前自行 mkdir:path.parent.mkdir(parents=True, exist_ok=True)
30
- 禁止写 mounted/ 或沙箱外的任何路径。
31
-
32
- 【读取 mounted/】mounted/ 下的文件(用户上传 / 租户共享)是懒加载的:
33
- agent 调用 read_file 工具后文件才会物化到本地,脚本不能假设文件已存在。
34
-
35
- 正确用法:
36
- if MOUNTED_USER.exists() and (MOUNTED_USER / "data.xlsx").exists():
37
- ...
38
-
39
- 【跨轮 outputs / state 惯用写法】
40
- 上一轮写入 OUTPUTS_DIR / STATE_DIR 的文件,本轮启动时已由运行时 eager 还原到原路径,
41
- 脚本直接读写即可(路径稳定,无需 read_file 物化):
42
-
43
- 读:
44
- import json
45
- _state_file = STATE_DIR / "progress.json" # 用有语义的名字
46
- state = {}
47
- if _state_file.exists():
48
- try:
49
- state = json.loads(_state_file.read_text(encoding="utf-8"))
50
- except Exception:
51
- pass
52
-
53
- 写:
54
- _state_file.parent.mkdir(parents=True, exist_ok=True)
55
- _state_file.write_text(json.dumps(state, ensure_ascii=False, indent=2), encoding="utf-8")
56
-
57
- 【路径格式】WORKSPACE_DIR 由运行时注入(docker: /sandbox/workspace,本地: {run_dir}/workspace),
58
- 所有路径常量均为绝对 Path,不依赖 CWD。
59
- ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
60
- """
61
-
62
- import os as _os
63
- import sys as _sys
64
- from datetime import datetime as _dt
65
- from pathlib import Path
66
-
67
- # ── sys.path bootstrap ────────────────────────────────────────────────────────
68
- # Use __main__.__file__ when available (direct execution) so that module
69
- # caching or re-import does not return a stale frame from a different caller.
70
- _main_mod = _sys.modules.get("__main__")
71
- _caller_file = _os.path.abspath(
72
- getattr(_main_mod, "__file__", None) or _sys._getframe(1).f_code.co_filename
73
- )
74
- _caller_dir = _os.path.dirname(_caller_file)
75
-
76
- # SOLVEA_LIB_DIR 由 SLG runtime(docker / local 都注入,见 env.py);
77
- # 通过 SLG runtime 之外裸跑脚本时,按仓库内 skills/{skill}/scripts 结构自动回退到 skills/__lib__。
78
- def _infer_lib_root_from_caller() -> str:
79
- cur = Path(_caller_dir).resolve()
80
- for parent in [cur, *cur.parents]:
81
- candidate = parent / "__lib__"
82
- if candidate.is_dir():
83
- return str(candidate)
84
- raise KeyError("SOLVEA_LIB_DIR")
85
-
86
-
87
- _lib_root = _os.environ.get("SOLVEA_LIB_DIR") or _infer_lib_root_from_caller()
88
-
89
- # caller's own scripts/ dir first (for sibling module imports like render.py)
90
- if _caller_dir not in _sys.path:
91
- _sys.path.insert(0, _caller_dir)
92
-
93
- # add all subdirs of __lib__ to sys.path (each lib is its own flat package)
94
- for _d in _os.listdir(_lib_root):
95
- _p = _os.path.join(_lib_root, _d)
96
- if _os.path.isdir(_p) and _p not in _sys.path:
97
- _sys.path.insert(0, _p)
98
-
99
- # ── skill name & standard paths ───────────────────────────────────────────────
100
- # Support both scripts/foo.py and focused subdirectories such as
101
- # scripts/report/foo.py. The nearest scripts/ ancestor defines the skill root.
102
- _caller_path = Path(_caller_dir).resolve()
103
- _scripts_dir = next(
104
- (path for path in [_caller_path, *_caller_path.parents] if path.name == "scripts"),
105
- None,
106
- )
107
- SKILL_NAME = _scripts_dir.parent.name if _scripts_dir else _caller_path.parent.name
108
-
109
- # WORKSPACE_DIR is injected by both backends (docker: /sandbox/workspace, local: {run_dir}/workspace).
110
- # Falls back to relative "workspace" when running a script outside the runtime.
111
- _workspace_dir = _os.environ.get("WORKSPACE_DIR")
112
- if _workspace_dir:
113
- WORKSPACE = Path(_workspace_dir)
114
- _root_dir = WORKSPACE.parent
115
- _mounted_base = _root_dir / "mounted"
116
- else:
117
- WORKSPACE = Path("workspace")
118
- _mounted_base = Path("mounted")
119
-
120
- OUTPUTS_DIR = WORKSPACE / "outputs" / SKILL_NAME
121
- STATE_DIR = WORKSPACE / "state" / SKILL_NAME
122
- TMP_DIR = WORKSPACE / "tmp" / SKILL_NAME
123
-
124
- MOUNTED_USER = _mounted_base / "chat-files" / "user"
125
- MOUNTED_TENANT = _mounted_base / "tenant-files"
126
-
127
- # ── Solvea context injected by the runtime ────────────────────────────────────
128
- SOLVEA_TENANT_ID = _os.environ.get("SOLVEA_TENANT_ID", "")
129
- SOLVEA_PROJECT_ID = _os.environ.get("SOLVEA_PROJECT_ID", "")
130
- SOLVEA_ENV = _os.environ.get("SOLVEA_ENV", "prod")
131
-
132
-
133
- def timestamp() -> str:
134
- return _dt.now().strftime("%Y%m%d_%H%M%S")
File without changes