teamcopilot 0.0.1
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/.env.example +10 -0
- package/LICENSE.md +21 -0
- package/README.md +131 -0
- package/bin/teamcopilot.js +281 -0
- package/dist/auth/index.js +189 -0
- package/dist/change-user-role.js +77 -0
- package/dist/chat/index.js +849 -0
- package/dist/constants.js +2 -0
- package/dist/create-user.js +98 -0
- package/dist/cronjob/index.js +16 -0
- package/dist/cronjob/resource-reconciliation.js +33 -0
- package/dist/delete-user.js +66 -0
- package/dist/frontend/assets/abap-CRCWOmpq.js +1 -0
- package/dist/frontend/assets/apex-DnsZk_dE.js +1 -0
- package/dist/frontend/assets/azcli-1IWB1ccx.js +1 -0
- package/dist/frontend/assets/bat-DPkNLes8.js +1 -0
- package/dist/frontend/assets/bicep-Corcdgou.js +2 -0
- package/dist/frontend/assets/cameligo-CGrWLZr3.js +1 -0
- package/dist/frontend/assets/clojure-D9WOWImG.js +1 -0
- package/dist/frontend/assets/codicon-DCmgc-ay.ttf +0 -0
- package/dist/frontend/assets/coffee-B7EJu28W.js +1 -0
- package/dist/frontend/assets/cpp-SEyurbux.js +1 -0
- package/dist/frontend/assets/csharp-BoL64M5l.js +1 -0
- package/dist/frontend/assets/csp-C46ZqvIl.js +1 -0
- package/dist/frontend/assets/css-DQU6DXDx.js +3 -0
- package/dist/frontend/assets/cssMode-BDT3WbVs.js +4 -0
- package/dist/frontend/assets/cypher-D84EuPTj.js +1 -0
- package/dist/frontend/assets/dart-D8lhlL1r.js +1 -0
- package/dist/frontend/assets/dockerfile-DLk6rpji.js +1 -0
- package/dist/frontend/assets/ecl-BO6FnfXk.js +1 -0
- package/dist/frontend/assets/editor.worker-B4pQIWZD.js +12 -0
- package/dist/frontend/assets/elixir-BRjLKONM.js +1 -0
- package/dist/frontend/assets/flow9-Cac8vKd7.js +1 -0
- package/dist/frontend/assets/freemarker2-C7-hEgID.js +3 -0
- package/dist/frontend/assets/fsharp-fd1GTHhf.js +1 -0
- package/dist/frontend/assets/go-O9LJTZXk.js +1 -0
- package/dist/frontend/assets/graphql-LQdxqEYJ.js +1 -0
- package/dist/frontend/assets/handlebars-4cwTkPir.js +1 -0
- package/dist/frontend/assets/hcl-DxDQ3s82.js +1 -0
- package/dist/frontend/assets/html-YNfE1Q0A.js +1 -0
- package/dist/frontend/assets/htmlMode-opTQ1HoB.js +4 -0
- package/dist/frontend/assets/index-DWyaVa1h.js +782 -0
- package/dist/frontend/assets/index-lXrsgeTF.css +1 -0
- package/dist/frontend/assets/ini-BvajGCUy.js +1 -0
- package/dist/frontend/assets/java-SYsfObOQ.js +1 -0
- package/dist/frontend/assets/javascript-BEwGzk7T.js +1 -0
- package/dist/frontend/assets/jsonMode-CGhIS5Al.js +10 -0
- package/dist/frontend/assets/julia-DQXNmw_w.js +1 -0
- package/dist/frontend/assets/kotlin-qQ0MG-9I.js +1 -0
- package/dist/frontend/assets/less-GGFNNJHn.js +2 -0
- package/dist/frontend/assets/lexon-Canl7DCW.js +1 -0
- package/dist/frontend/assets/liquid-QekTGCGJ.js +1 -0
- package/dist/frontend/assets/lua-D28Ae8-K.js +1 -0
- package/dist/frontend/assets/m3-DPitgjJI.js +1 -0
- package/dist/frontend/assets/markdown-B811l8j2.js +1 -0
- package/dist/frontend/assets/mdx-BAVDaB7v.js +1 -0
- package/dist/frontend/assets/mips-CdjsipkG.js +1 -0
- package/dist/frontend/assets/msdax-CYqgjx_P.js +1 -0
- package/dist/frontend/assets/mysql-BHd6q0vd.js +1 -0
- package/dist/frontend/assets/objective-c-B1aVtJYH.js +1 -0
- package/dist/frontend/assets/pascal-BhNW15KB.js +1 -0
- package/dist/frontend/assets/pascaligo-5jv8CcQD.js +1 -0
- package/dist/frontend/assets/perl-DlYyT36c.js +1 -0
- package/dist/frontend/assets/pgsql-Dy0bjov7.js +1 -0
- package/dist/frontend/assets/php-120yhfDK.js +1 -0
- package/dist/frontend/assets/pla-CjnFlu4u.js +1 -0
- package/dist/frontend/assets/postiats-CQpG440k.js +1 -0
- package/dist/frontend/assets/powerquery-DdJtto1Z.js +1 -0
- package/dist/frontend/assets/powershell-Bu_VLpJB.js +1 -0
- package/dist/frontend/assets/protobuf-IBS6jZEB.js +2 -0
- package/dist/frontend/assets/pug-kFxLfcjb.js +1 -0
- package/dist/frontend/assets/python-BQlHw7XO.js +1 -0
- package/dist/frontend/assets/qsharp-q7JyzKFN.js +1 -0
- package/dist/frontend/assets/r-BIFz-_sK.js +1 -0
- package/dist/frontend/assets/razor-Be3Wwc2E.js +1 -0
- package/dist/frontend/assets/redis-CHOsPHWR.js +1 -0
- package/dist/frontend/assets/redshift-CBifECDb.js +1 -0
- package/dist/frontend/assets/restructuredtext-CghPJEOS.js +1 -0
- package/dist/frontend/assets/ruby-CYWGW-b1.js +1 -0
- package/dist/frontend/assets/rust-DMDD0SHb.js +1 -0
- package/dist/frontend/assets/sb-BYAiYHFx.js +1 -0
- package/dist/frontend/assets/scala-Bqvq8jcR.js +1 -0
- package/dist/frontend/assets/scheme-Dhb-2j9p.js +1 -0
- package/dist/frontend/assets/scss-CTwUZ5N7.js +3 -0
- package/dist/frontend/assets/shell-CsDZo4DB.js +1 -0
- package/dist/frontend/assets/solidity-CME5AdoB.js +1 -0
- package/dist/frontend/assets/sophia-RYC1BQQz.js +1 -0
- package/dist/frontend/assets/sparql-KEyrF7De.js +1 -0
- package/dist/frontend/assets/sql-BdTr02Mf.js +1 -0
- package/dist/frontend/assets/st-C7iG7M4S.js +1 -0
- package/dist/frontend/assets/swift-D7IUmUK8.js +1 -0
- package/dist/frontend/assets/systemverilog-DgMryOEJ.js +1 -0
- package/dist/frontend/assets/tcl-PloMZuKG.js +1 -0
- package/dist/frontend/assets/tsMode-CIBFoN3z.js +11 -0
- package/dist/frontend/assets/twig-BfRIq3la.js +1 -0
- package/dist/frontend/assets/typescript-BuV9wEIE.js +1 -0
- package/dist/frontend/assets/typespec-CzxlYoT_.js +1 -0
- package/dist/frontend/assets/vb-BwAE3J76.js +1 -0
- package/dist/frontend/assets/wgsl-B_1kOXbF.js +298 -0
- package/dist/frontend/assets/xml-DcDKYaM4.js +1 -0
- package/dist/frontend/assets/yaml-CuBNmOuI.js +1 -0
- package/dist/frontend/index.html +14 -0
- package/dist/frontend/logo.svg +50 -0
- package/dist/index.js +169 -0
- package/dist/logging.js +30 -0
- package/dist/opencode-auth/index.js +122 -0
- package/dist/opencode-server.js +91 -0
- package/dist/prisma/client.js +38 -0
- package/dist/reset-password.js +73 -0
- package/dist/rotate-jwt-secret.js +20 -0
- package/dist/scripts/prisma-workspace.js +34 -0
- package/dist/skills/index.js +311 -0
- package/dist/types/permissions.js +2 -0
- package/dist/types/shared/permissions.js +17 -0
- package/dist/types/shared/skill.js +17 -0
- package/dist/types/shared/workflow-files.js +17 -0
- package/dist/types/shared/workflow.js +17 -0
- package/dist/types/skill.js +2 -0
- package/dist/types/workflow-files.js +2 -0
- package/dist/types/workflow.js +2 -0
- package/dist/users/index.js +22 -0
- package/dist/utils/approval-snapshot-common.js +596 -0
- package/dist/utils/assert.js +20 -0
- package/dist/utils/chat-session.js +44 -0
- package/dist/utils/cli-bootstrap.js +26 -0
- package/dist/utils/index.js +95 -0
- package/dist/utils/jwt-secret.js +63 -0
- package/dist/utils/opencode-auth.js +126 -0
- package/dist/utils/opencode-client.js +109 -0
- package/dist/utils/password-policy.js +12 -0
- package/dist/utils/permission-common.js +280 -0
- package/dist/utils/redact.js +108 -0
- package/dist/utils/resource-access.js +37 -0
- package/dist/utils/resource-file-routes.js +115 -0
- package/dist/utils/resource-files.js +572 -0
- package/dist/utils/runtime-paths.js +61 -0
- package/dist/utils/session-abort.js +52 -0
- package/dist/utils/skill-approval-snapshot.js +39 -0
- package/dist/utils/skill-files.js +17 -0
- package/dist/utils/skill-permissions.js +15 -0
- package/dist/utils/skill.js +217 -0
- package/dist/utils/user-role.js +14 -0
- package/dist/utils/workflow-approval-snapshot.js +38 -0
- package/dist/utils/workflow-files.js +17 -0
- package/dist/utils/workflow-interruption.js +50 -0
- package/dist/utils/workflow-permissions.js +27 -0
- package/dist/utils/workflow-runner.js +414 -0
- package/dist/utils/workflow.js +158 -0
- package/dist/utils/workspace-sync.js +204 -0
- package/dist/workflows/index.js +751 -0
- package/dist/workspace_files/.opencode/opencode.json +17 -0
- package/dist/workspace_files/.opencode/package.json +14 -0
- package/dist/workspace_files/.opencode/plugins/createSkill.ts +339 -0
- package/dist/workspace_files/.opencode/plugins/createWorkflow.ts +345 -0
- package/dist/workspace_files/.opencode/plugins/findSimilarWorkflow.ts +173 -0
- package/dist/workspace_files/.opencode/plugins/findSkill.ts +211 -0
- package/dist/workspace_files/.opencode/plugins/getSkillContent.ts +135 -0
- package/dist/workspace_files/.opencode/plugins/honeytoken-protection.ts +64 -0
- package/dist/workspace_files/.opencode/plugins/listAvailableSkills.ts +93 -0
- package/dist/workspace_files/.opencode/plugins/listAvailableWorkflows.ts +93 -0
- package/dist/workspace_files/.opencode/plugins/python-protection.ts +184 -0
- package/dist/workspace_files/.opencode/plugins/runWorkflow.ts +168 -0
- package/dist/workspace_files/.opencode/tsconfig.json +16 -0
- package/dist/workspace_files/AGENTS.md +483 -0
- package/dist/workspace_files/package-lock.json +167 -0
- package/dist/workspace_files/package.json +5 -0
- package/package.json +86 -0
- package/prisma/migrations/20260203040755_init/migration.sql +20 -0
- package/prisma/migrations/20260204034845_replace_google_auth_with_email_password/migration.sql +25 -0
- package/prisma/migrations/20260207022226_add_user_role/migration.sql +25 -0
- package/prisma/migrations/20260210161254_add_workflow_runs/migration.sql +16 -0
- package/prisma/migrations/20260211050606_adds_workflow_table/migration.sql +40 -0
- package/prisma/migrations/20260211050750_adds_fkey_constraint/migration.sql +21 -0
- package/prisma/migrations/20260211051912_removes_workflow_table/migration.sql +34 -0
- package/prisma/migrations/20260211052238_changes_workflow_id_to_slug/migration.sql +27 -0
- package/prisma/migrations/20260212051912_add_output_to_workflow_runs/migration.sql +2 -0
- package/prisma/migrations/20260213073006_add_chat_sessions/migration.sql +13 -0
- package/prisma/migrations/20260216053202_add_chat_sessions_opencode_session_id_idx/migration.sql +2 -0
- package/prisma/migrations/20260216053237_drop_redundant_chat_sessions_opencode_idx/migration.sql +2 -0
- package/prisma/migrations/20260219060705_makes/migration.sql +24 -0
- package/prisma/migrations/20260222040542_add_workflow_execution_permissions/migration.sql +18 -0
- package/prisma/migrations/20260222040815_remove_workflow_execution_permissions/migration.sql +10 -0
- package/prisma/migrations/20260222041348_add_workflow_execution_permissions_final/migration.sql +17 -0
- package/prisma/migrations/20260222041741_rename_to_tool_execution_permissions/migration.sql +30 -0
- package/prisma/migrations/20260222041826_simplify_tool_execution_permissions/migration.sql +29 -0
- package/prisma/migrations/20260222041950_add_fields_for_standalone_permissions/migration.sql +32 -0
- package/prisma/migrations/20260222042954_simplify_tool_permissions_table/migration.sql +27 -0
- package/prisma/migrations/20260223073902_add_workflow_run_permissions_tables/migration.sql +23 -0
- package/prisma/migrations/20260225025151_add_workflow_metadata/migration.sql +16 -0
- package/prisma/migrations/20260225031035_merge_workflow_permissions_into_metadata/migration.sql +44 -0
- package/prisma/migrations/20260225031752_removes_default_for_run_permission_mode/migration.sql +20 -0
- package/prisma/migrations/20260225033603_remove_workflow_metadata_user_fkeys/migration.sql +18 -0
- package/prisma/migrations/20260225043032_restore_workflow_metadata_user_fkeys/migration.sql +20 -0
- package/prisma/migrations/20260225091423_add_workflow_approved_snapshots/migration.sql +28 -0
- package/prisma/migrations/20260226032121_add_is_approved_to_workflow_metadata/migration.sql +21 -0
- package/prisma/migrations/20260226032444_undoes_last_db_change/migration.sql +26 -0
- package/prisma/migrations/20260227120000_remove_snapshot_hash_from_approved_snapshots/migration.sql +16 -0
- package/prisma/migrations/20260228071125_adds_workspace_path_to_snapshot_table/migration.sql +22 -0
- package/prisma/migrations/20260228071217_modifies_index_and_removes_default_value/migration.sql +22 -0
- package/prisma/migrations/20260228071710_undoes_previous/migration.sql +27 -0
- package/prisma/migrations/20260228105022_add_must_change_password_first_login/migration.sql +20 -0
- package/prisma/migrations/20260301115439_add_workflow_run_log_refs/migration.sql +8 -0
- package/prisma/migrations/20260301122557_add_workflow_aborted_sessions/migration.sql +5 -0
- package/prisma/migrations/20260302045545_move_workflow_run_log_refs_into_workflow_runs/migration.sql +17 -0
- package/prisma/migrations/20260303040318_add_skill_tables/migration.sql +61 -0
- package/prisma/migrations/20260303051533_unify_resource_permissions/migration.sql +97 -0
- package/prisma/migrations/20260303064255_unify_resource_metadata_and_snapshots/migration.sql +179 -0
- package/prisma/migrations/migration_lock.toml +3 -0
- package/prisma/schema.prisma +147 -0
|
@@ -0,0 +1,483 @@
|
|
|
1
|
+
# TeamCopilot Agent Instructions
|
|
2
|
+
|
|
3
|
+
This document is your operating manual for working within this directory (called workspace). Follow these conventions strictly when creating, updating, or running workflows and custom skills.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Additional Workspace Instructions
|
|
8
|
+
|
|
9
|
+
At session start, TeamCopilot checks whether `USER_INSTRUCTIONS.md` exists at the workspace root.
|
|
10
|
+
|
|
11
|
+
- If it exists and is non-empty, its full contents are automatically appended as the first chat for the new session.
|
|
12
|
+
- If it exists and any instruction conflicts with this file, `USER_INSTRUCTIONS.md` takes precedence.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Required Decision Order (ALWAYS FOLLOW)
|
|
17
|
+
|
|
18
|
+
For every user request, follow this exact sequence:
|
|
19
|
+
|
|
20
|
+
1. **Look for a relevant custom skill first** using `findSkill` (and `listAvailableSkills` when needed).
|
|
21
|
+
2. **If no suitable skill is found**, look for a relevant workflow using `findSimilarWorkflow` (and `listAvailableWorkflows` when needed).
|
|
22
|
+
3. **If neither exists**, then consider creation:
|
|
23
|
+
- Create a new skill using `createSkill` when the need is reusable instruction logic.
|
|
24
|
+
- Create a new workflow using `createWorkflow` when executable automation is needed.
|
|
25
|
+
|
|
26
|
+
Do NOT skip this sequence.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## ⚠️ CRITICAL: Never Run Workflow Entrypoints Directly
|
|
31
|
+
|
|
32
|
+
**You must NEVER execute workflow scripts directly using shell commands.**
|
|
33
|
+
|
|
34
|
+
All workflow execution performed by the agent **must** go through the `runWorkflow` tool. This is enforced because:
|
|
35
|
+
- Only workflows that have been **approved by an engineer user** can be executed. This check (among other checks) is performed by the `runWorkflow` tool.
|
|
36
|
+
- The `runWorkflow` can throw an error for various reasons. If it does, read the error message and report it to the user accurately.
|
|
37
|
+
|
|
38
|
+
You may run normal shell commands (including `python`, `pip`, `node`, `npm`, etc.) for setup, dependency management, validation, and non-workflow tasks. The only restricted action is directly executing a workflow entrypoint script from shell.
|
|
39
|
+
|
|
40
|
+
**Forbidden actions (for the agent):**
|
|
41
|
+
- ❌ `python run.py` when inside `workflows/<slug>/`
|
|
42
|
+
- ❌ `cd workflows/<slug> && python run.py`
|
|
43
|
+
- ❌ `python workflows/<slug>/run.py` (or absolute path variants)
|
|
44
|
+
- ❌ `python3 run.py`, `python3.x run.py`, `python2 run.py`, `py run.py`, `pypy run.py` when targeting a workflow `run.py`
|
|
45
|
+
- ❌ Any shell command that executes a workflow entrypoint script directly (instead of using `runWorkflow`)
|
|
46
|
+
|
|
47
|
+
**Required action:**
|
|
48
|
+
- ✅ Use the `runWorkflow` tool to execute any workflow
|
|
49
|
+
- ✅ After `createWorkflow`, immediately create `workflows/<slug>/.venv` using `python -m venv .venv` (or `python3 -m venv .venv`) from inside that workflow folder
|
|
50
|
+
|
|
51
|
+
**Allowed shell commands:**
|
|
52
|
+
- ✅ Any command, except for executing a workflow entrypoint directly from shell.
|
|
53
|
+
- ✅ `cd workflows/<slug> && python -m venv .venv`
|
|
54
|
+
- ✅ `cd workflows/<slug> && python3 -m venv .venv`
|
|
55
|
+
|
|
56
|
+
Violating this constraint bypasses safety checks and is not permitted.
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Section 1: Custom Skills
|
|
61
|
+
|
|
62
|
+
Before implementing custom instructions or creating new workflow logic, you MUST first check whether an existing custom skill can fulfill the request.
|
|
63
|
+
|
|
64
|
+
**Required skill tools:**
|
|
65
|
+
- `listAvailableSkills` — list only skills you are allowed to use (editable + approved).
|
|
66
|
+
- `findSkill` — semantically search skills by description/body.
|
|
67
|
+
- `getSkillContent` — read `SKILL.md` for a specific skill (only works when user has access and skill is approved).
|
|
68
|
+
- `createSkill` — create a new skill when no suitable skill exists. This tool requires explicit user permission during execution.
|
|
69
|
+
|
|
70
|
+
**Rule:**
|
|
71
|
+
- Always try `findSkill` before creating a new skill.
|
|
72
|
+
- If a relevant skill exists, use it and follow its `SKILL.md` instructions.
|
|
73
|
+
- If no relevant skill exists, use `createSkill`.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
### What is a Custom Skill?
|
|
78
|
+
|
|
79
|
+
A **custom skill** is a reusable instruction package for the agent that lives in `custom-skills/<slug>/`.
|
|
80
|
+
Each custom skill:
|
|
81
|
+
- Has a unique slug (lowercase, hyphenated, e.g., `triage-support-ticket`)
|
|
82
|
+
- Uses `SKILL.md` as the canonical manifest/instruction file
|
|
83
|
+
- Must be **approved by an engineer user** before it is considered usable via the skill tools
|
|
84
|
+
- Must only be used when you have access to it through platform permissions
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Section 2: Workflows
|
|
89
|
+
|
|
90
|
+
### What is a Workflow?
|
|
91
|
+
|
|
92
|
+
A **workflow** is a self-contained automation package that lives in `workflows/<slug>/`. Each workflow:
|
|
93
|
+
- Has a unique slug (lowercase, hyphenated, e.g., `failed-stripe-payments`)
|
|
94
|
+
- Is filesystem-first: the folder contents are the source of truth
|
|
95
|
+
- Must be self-contained on disk: **any external additions** required by the workflow (e.g., cloned git repos, downloaded SDKs/assets, vendored scripts, fixtures) **must be placed inside** `workflows/<slug>/` and **must not** be created/checked out anywhere outside the workflow folder
|
|
96
|
+
- Can be triggered manually via the `runWorkflow` tool (by you) or from the UI (by a human)
|
|
97
|
+
- Must be **approved by an engineer user** before it can be executed
|
|
98
|
+
- Internally runs through approved platform runtime entrypoints
|
|
99
|
+
- **Agent execution**: must be invoked via `runWorkflow` (never via shell)
|
|
100
|
+
- **Human execution**: should also go through approved platform tooling
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
### Workflow Package Structure
|
|
105
|
+
|
|
106
|
+
Every workflow folder must follow this structure:
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
workflows/<slug>/
|
|
110
|
+
├── workflow.json ← REQUIRED: contract + runtime metadata
|
|
111
|
+
├── README.md ← REQUIRED: documentation + usage instructions
|
|
112
|
+
├── run.py ← REQUIRED: entrypoint script
|
|
113
|
+
├── requirements.txt ← REQUIRED: Python dependencies
|
|
114
|
+
├── .env ← REQUIRED: runtime secrets
|
|
115
|
+
├── .env.example ← RECOMMENDED: documented template
|
|
116
|
+
├── .venv/ ← REQUIRED: per-workflow virtualenv
|
|
117
|
+
├── requirements.lock.txt ← REQUIRED: records installed versions for reference
|
|
118
|
+
└── data/ ← OPTIONAL: non-secret config/state files
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
### Required Files
|
|
124
|
+
|
|
125
|
+
### 1. `workflow.json` — The Workflow Contract
|
|
126
|
+
|
|
127
|
+
This manifest defines what the workflow does and how it runs. The UI and execution layer use this as the contract.
|
|
128
|
+
|
|
129
|
+
```json
|
|
130
|
+
{
|
|
131
|
+
"intent_summary": "Human-readable description of what this workflow does",
|
|
132
|
+
"inputs": {
|
|
133
|
+
"customer_id": {
|
|
134
|
+
"type": "string",
|
|
135
|
+
"required": true,
|
|
136
|
+
"description": "The Stripe customer ID to check"
|
|
137
|
+
},
|
|
138
|
+
"days_back": {
|
|
139
|
+
"type": "number",
|
|
140
|
+
"required": false,
|
|
141
|
+
"default": 7,
|
|
142
|
+
"description": "Number of days to look back for failed payments"
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
"triggers": {
|
|
146
|
+
"manual": true // will always be true.
|
|
147
|
+
},
|
|
148
|
+
"runtime": {
|
|
149
|
+
"timeout_seconds": 300
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
### 2. `README.md` — Documentation
|
|
155
|
+
|
|
156
|
+
Document:
|
|
157
|
+
- What the workflow does
|
|
158
|
+
- Required credentials/secrets
|
|
159
|
+
- Input parameters and their meaning
|
|
160
|
+
- Expected outputs
|
|
161
|
+
- Example usage
|
|
162
|
+
|
|
163
|
+
### 3. `run.py` — Entrypoint Script
|
|
164
|
+
|
|
165
|
+
The main script that executes the workflow logic. It must:
|
|
166
|
+
- Not be run directly with Python from shell; execution must happen via approved platform tooling only
|
|
167
|
+
- Be end-to-end self-contained: it should perform the full workflow (setup (if needed) + inputs → processing → outputs) in one invocation
|
|
168
|
+
- Read inputs via args passed to the script.
|
|
169
|
+
- Write outputs to to the console.
|
|
170
|
+
- Handle errors gracefully
|
|
171
|
+
|
|
172
|
+
Example:
|
|
173
|
+
```python
|
|
174
|
+
import argparse
|
|
175
|
+
|
|
176
|
+
def main():
|
|
177
|
+
parser = argparse.ArgumentParser()
|
|
178
|
+
parser.add_argument("--customer_id", required=True, help="The Stripe customer ID to check")
|
|
179
|
+
parser.add_argument("--days_back", type=int, default=7, help="Number of days to look back")
|
|
180
|
+
args = parser.parse_args()
|
|
181
|
+
|
|
182
|
+
# Your workflow logic here
|
|
183
|
+
|
|
184
|
+
print(f"Processed customer: {args.customer_id}")
|
|
185
|
+
|
|
186
|
+
if __name__ == "__main__":
|
|
187
|
+
main()
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### 4. `requirements.txt` — Dependencies
|
|
191
|
+
|
|
192
|
+
List all Python dependencies. **Do NOT specify versions** — always use the latest version.
|
|
193
|
+
|
|
194
|
+
```
|
|
195
|
+
stripe
|
|
196
|
+
requests
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
**Important:** When adding dependencies:
|
|
200
|
+
- Do NOT add version specifiers in `requirements.txt` (e.g., don't use `stripe>=5.0.0`)
|
|
201
|
+
- Do NOT use `pip install package==version` — just use `pip install package`
|
|
202
|
+
- Always install the latest version available
|
|
203
|
+
- After adding any new dependency, you MUST run: `pip freeze > requirements.lock.txt`
|
|
204
|
+
|
|
205
|
+
### `requirements.lock.txt` — Locked Dependencies
|
|
206
|
+
|
|
207
|
+
This file records the exact versions of all installed packages. **The only way to modify this file is by running:**
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
pip freeze > requirements.lock.txt
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
- Run this command every time you add, remove, or update any dependency
|
|
214
|
+
- Never edit this file manually
|
|
215
|
+
- This ensures the lock file accurately reflects what's installed in the virtualenv
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
### Optional Files
|
|
220
|
+
|
|
221
|
+
### `data/` — Workflow State and Configuration
|
|
222
|
+
|
|
223
|
+
This folder is for storing non-secret state and configuration as JSON files. Use it when your workflow needs to persist data between runs.
|
|
224
|
+
|
|
225
|
+
**Guidelines:**
|
|
226
|
+
- Store state as JSON files (e.g., `last_processed.json`, `cache.json`, `config.json`, `data.json` etc.)
|
|
227
|
+
- Structure the folder however fits your workflow's needs
|
|
228
|
+
- **Document any data structure in `README.md`** — whenever you add a new file, change the schema of an existing file, or modify the folder structure, update the workflow's README to reflect these changes
|
|
229
|
+
|
|
230
|
+
**Example structure:**
|
|
231
|
+
```
|
|
232
|
+
data/
|
|
233
|
+
├── last_sync.json # Timestamp of last successful sync
|
|
234
|
+
├── customer_cache.json # Cached customer data to avoid re-fetching
|
|
235
|
+
└── config.json # Workflow-specific configuration overrides
|
|
236
|
+
...
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
**Important:** Always document the purpose and schema of each file in the workflow's `README.md`. This helps future maintainers and AI agents understand what data is being stored and how it's structured.
|
|
240
|
+
|
|
241
|
+
---
|
|
242
|
+
|
|
243
|
+
## Shared Conventions
|
|
244
|
+
|
|
245
|
+
### Custom Skills: Usage Flow
|
|
246
|
+
|
|
247
|
+
1. **Search skills first** — You MUST use `findSkill` to look for an existing skill that can satisfy the request before creating new skill logic.
|
|
248
|
+
2. **Inspect matching skills** — Use `getSkillContent` to read candidate `SKILL.md` files and decide whether one applies.
|
|
249
|
+
3. **Create only when needed** — Use `createSkill` only if no existing approved + accessible skill is a good fit.
|
|
250
|
+
4. **Use listing when needed** — Use `listAvailableSkills` when you need a quick inventory of usable skills.
|
|
251
|
+
|
|
252
|
+
### Workflows: Creating a New Workflow
|
|
253
|
+
|
|
254
|
+
1. **Check for similar workflows first** — You MUST use the `findSimilarWorkflow` tool to search for existing workflows; do NOT use shell or bash commands (for example `grep`, `rg`, or `find`) to search the repository for workflows.
|
|
255
|
+
- If you find a similar workflow, **learn from it**: take relevant business logic from it.
|
|
256
|
+
- If you only want to find an existing workflow to run (not create a new one), you MUST also use the `findSimilarWorkflow` tool rather than searching with shell commands.
|
|
257
|
+
- Use `listAvailableWorkflows` when you need a quick inventory of all accessible workflows before narrowing down.
|
|
258
|
+
2. **Use the `createWorkflow` tool** — This creates the workflow folder with all required files:
|
|
259
|
+
- `slug`: The workflow name (lowercase, hyphens, e.g., `failed-stripe-payments`)
|
|
260
|
+
- `intent_summary`: Description of what the workflow does
|
|
261
|
+
- `inputs`: (optional) Input parameter schema
|
|
262
|
+
- `timeout_seconds`: (optional, default 300) Max execution time
|
|
263
|
+
3. **Create the virtual environment immediately** — Right after `createWorkflow`, create a workflow-local virtualenv:
|
|
264
|
+
- `cd workflows/<slug> && python -m venv .venv` (or `python3 -m venv .venv`)
|
|
265
|
+
4. **Implement the workflow** — After the tool creates the skeleton and `.venv`:
|
|
266
|
+
- Edit `run.py` — Implement the logic with argparse for inputs
|
|
267
|
+
- Edit `requirements.txt` — Add Python dependencies (no version specifiers)
|
|
268
|
+
- Edit `.env` — Add runtime secrets
|
|
269
|
+
- Edit `.env.example` — Document required secrets as a template
|
|
270
|
+
- Edit `README.md` — Document the workflow
|
|
271
|
+
- Create `.venv/` — Create a per-workflow virtualenv
|
|
272
|
+
- Update `requirements.lock.txt` — Run `pip freeze > requirements.lock.txt` after installing deps
|
|
273
|
+
5. **Optionally create `data/`** — If the workflow needs to persist state between runs (document structure in README)
|
|
274
|
+
|
|
275
|
+
### Workflows: Updating an Existing Workflow
|
|
276
|
+
|
|
277
|
+
1. **Read the current files** — Understand existing logic before modifying
|
|
278
|
+
2. **Re-check the workflow slug** — If you want to change what `run.py` does, you MUST ensure the workflow folder slug (the `workflows/<slug>/` name) is still apt for the workflow’s purpose. If it no longer fits, consider finding a more appropriate existing workflow or creating a new workflow with a better slug instead of overloading the old one.
|
|
279
|
+
3. **Modify the `run.py` file** to implement the desired functionality.
|
|
280
|
+
4. **Preserve the contract** — If changing inputs/outputs, update `workflow.json`
|
|
281
|
+
5. **Keep `workflow.json` aligned with behavior** — If you modify `run.py`, you MUST also update the `intent_summary` in `workflow.json` to match the new/updated behavior.
|
|
282
|
+
6. **Update documentation** — Keep `README.md` in sync with changes
|
|
283
|
+
7. **Test locally if possible** — Run the workflow to verify changes
|
|
284
|
+
|
|
285
|
+
### Workflows: Running Workflows
|
|
286
|
+
|
|
287
|
+
If you simply need to find an existing workflow to run (and are not creating a new workflow), use `findSimilarWorkflow` (and `listAvailableWorkflows` when useful) to locate it; do NOT search using shell commands.
|
|
288
|
+
|
|
289
|
+
**⚠️ CRITICAL: Never run workflows directly via shell commands. Always use the `runWorkflow` tool.**
|
|
290
|
+
|
|
291
|
+
- Workflows are executed via the `runWorkflow` tool (NOT via shell commands)
|
|
292
|
+
- The tool checks if the workflow is approved before execution
|
|
293
|
+
- If not approved, the tool returns an error — you cannot bypass this.
|
|
294
|
+
- Outputs are captured and returned by the tool
|
|
295
|
+
- Each workflow has its own `.venv/` virtualenv (managed by the execution environment)
|
|
296
|
+
- Dependencies are installed from `requirements.txt` (always latest versions) and recorded in `requirements.lock.txt`
|
|
297
|
+
|
|
298
|
+
### Workflows: Credential Handling
|
|
299
|
+
|
|
300
|
+
- Store secrets in `.env`
|
|
301
|
+
- Always provide `.env.example` with placeholder values
|
|
302
|
+
- Document which secrets are required in `README.md`
|
|
303
|
+
- If the user provides secrets/tokens during execution, you MAY use them to complete the requested task.
|
|
304
|
+
- Prefer storing workflow runtime secrets in that workflow's `.env` when appropriate.
|
|
305
|
+
- Never echo secrets/tokens in tool output summaries or chat responses.
|
|
306
|
+
|
|
307
|
+
### Workflows: Output and Artifacts
|
|
308
|
+
|
|
309
|
+
- Write outputs to the console (stdout/stderr) — this is captured by the `runWorkflow` tool
|
|
310
|
+
- Use structured formats (JSON) for machine-readable output when appropriate
|
|
311
|
+
|
|
312
|
+
---
|
|
313
|
+
|
|
314
|
+
### Workflows: Input Handling
|
|
315
|
+
|
|
316
|
+
When **writing** workflow code, inputs are passed as command-line arguments to `run.py`. Use `argparse` to parse them:
|
|
317
|
+
|
|
318
|
+
```python
|
|
319
|
+
import argparse
|
|
320
|
+
|
|
321
|
+
parser = argparse.ArgumentParser()
|
|
322
|
+
parser.add_argument("--customer_id", required=True, help="The Stripe customer ID")
|
|
323
|
+
parser.add_argument("--days_back", type=int, default=7, help="Days to look back")
|
|
324
|
+
args = parser.parse_args()
|
|
325
|
+
|
|
326
|
+
# Access inputs
|
|
327
|
+
customer_id = args.customer_id
|
|
328
|
+
days_back = args.days_back
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
---
|
|
332
|
+
|
|
333
|
+
## Shared Best Practices
|
|
334
|
+
|
|
335
|
+
1. **Never run workflow entrypoints directly from shell** — Always use the `runWorkflow` tool for workflow execution
|
|
336
|
+
2. **Always check for existing skills first** — you MUST try `findSkill` and check whether a custom skill can fulfill the request before creating new workflow logic.
|
|
337
|
+
3. **Always check for existing workflows** before creating new ones — you MUST use the `findSimilarWorkflow` tool to do this. Use `listAvailableWorkflows` if you need a full inventory first. Only create new ones if no existing workflow can fit the request. If needed, modify the existing workflow to fit the request WITHOUT losing older functionality.
|
|
338
|
+
- If you find a similar workflow, **study it and follow its business logic and conventions**.
|
|
339
|
+
4. **Ask the user for help** when unsure.
|
|
340
|
+
- When asking the user questions, ask **just one question at a time**.
|
|
341
|
+
5. **Keep workflows focused** — one workflow, one purpose
|
|
342
|
+
6. **Document thoroughly** — future you (and others) will thank you
|
|
343
|
+
7. **Handle errors gracefully** — workflows should fail cleanly
|
|
344
|
+
8. **Be idempotent** — workflows may be retried; design for it
|
|
345
|
+
9. **Respect rate limits** — add appropriate delays for API calls
|
|
346
|
+
10. **Log meaningfully** — include context in log messages
|
|
347
|
+
11. **Don’t outgrow the slug** — If you want to change `run.py` meaningfully, re-check that the workflow slug is still apt; otherwise choose/create a workflow whose slug matches the intent.
|
|
348
|
+
12. **Keep the intent contract current** — Any change to `run.py` requires updating `workflow.json` `intent_summary` accordingly.
|
|
349
|
+
13. **Keep dependencies/artifacts inside the workflow folder** — If you must add external files (e.g., clone a repo, vendor code, download fixtures), put them under `workflows/<slug>/` and never outside it.
|
|
350
|
+
|
|
351
|
+
---
|
|
352
|
+
|
|
353
|
+
## Workflows: Error Handling and Retries
|
|
354
|
+
|
|
355
|
+
- Design workflows to be idempotent when possible
|
|
356
|
+
- Document idempotency expectations in `README.md`
|
|
357
|
+
|
|
358
|
+
---
|
|
359
|
+
|
|
360
|
+
## Security & Scope Restrictions (MUST FOLLOW)
|
|
361
|
+
|
|
362
|
+
These rules exist to prevent data loss, secret leakage, and unsafe behavior. Violations are not permitted.
|
|
363
|
+
|
|
364
|
+
### Scope limitation (workflows and custom skills)
|
|
365
|
+
|
|
366
|
+
- Primary execution scope remains **creating, managing, and running workflows and custom skills** in this workspace.
|
|
367
|
+
- You MAY also handle user requests for requirement gathering, discovery, analysis, and explanation that reference files outside the workspace.
|
|
368
|
+
- For such out-of-workspace requests, treat access as **read-only context gathering** unless the user explicitly asks for broader actions.
|
|
369
|
+
|
|
370
|
+
### Never delete workflows
|
|
371
|
+
|
|
372
|
+
- You must **NEVER delete a workflow** (folders or files under `workflows/<slug>/`).
|
|
373
|
+
- Workflow deletions are only supposed to happen via the **UI**.
|
|
374
|
+
- If cleanup is requested, prefer **deprecating** (e.g., update README/status/intent) rather than deleting anything.
|
|
375
|
+
|
|
376
|
+
### Never delete custom skills
|
|
377
|
+
|
|
378
|
+
- You must **NEVER delete a custom skill** (folders or files under `custom-skills/<slug>/`).
|
|
379
|
+
- Custom skill deletions are only supposed to happen via the **UI**.
|
|
380
|
+
- If cleanup is requested, prefer **deprecating** or updating skill instructions rather than deleting anything.
|
|
381
|
+
|
|
382
|
+
### Approval & execution integrity
|
|
383
|
+
|
|
384
|
+
- Never attempt to bypass workflow approval requirements.
|
|
385
|
+
- Never attempt to bypass custom-skill approval requirements.
|
|
386
|
+
- Never use `getSkillContent` output from unapproved skills to drive execution decisions.
|
|
387
|
+
|
|
388
|
+
### Secrets & sensitive data handling
|
|
389
|
+
|
|
390
|
+
- You are allowed to use secrets/tokens explicitly provided by the user during execution.
|
|
391
|
+
- UI redaction may mask secrets in the user-visible output, but you must still treat all secrets as sensitive.
|
|
392
|
+
- Never print, log, or exfiltrate secrets or credentials.
|
|
393
|
+
- Do not copy `.env` contents into chat output. But you can read them and use them as part of your execution flow.
|
|
394
|
+
- Do not proactively ask users to paste secrets in chat; prefer asking them to set secrets in the workflow's `.env` and document placeholders in `.env.example`.
|
|
395
|
+
- Only store workflow runtime secrets in `.env`, never in `README.md`, `workflow.json`, `requirements.txt`, `requirements.lock.txt`, `data/`, or `SKILL.md`.
|
|
396
|
+
|
|
397
|
+
### Filesystem safety boundaries
|
|
398
|
+
|
|
399
|
+
- You MAY read files outside managed workspace areas when needed to understand user requirements, gather context, or answer questions.
|
|
400
|
+
- Keep any cloned repos, downloaded assets, fixtures, or vendored code **inside** `workflows/<slug>/` only.
|
|
401
|
+
- Keep skill artifacts and instruction files inside `custom-skills/<slug>/` only.
|
|
402
|
+
|
|
403
|
+
### No destructive shell actions
|
|
404
|
+
|
|
405
|
+
- Do not run destructive commands that could delete or corrupt workflows, custom skills, or workspace state (for example `rm`, `rm -rf`, or scripted deletions).
|
|
406
|
+
- When changes are needed, prefer additive edits; avoid irreversible operations.
|
|
407
|
+
|
|
408
|
+
---
|
|
409
|
+
|
|
410
|
+
## Example: Creating a New Workflow
|
|
411
|
+
|
|
412
|
+
When asked to "Create a workflow that checks Stripe for failed payments":
|
|
413
|
+
|
|
414
|
+
1. Use the `findSimilarWorkflow` tool to check for existing payment-related workflows — do NOT search using shell commands (e.g., `grep`, `rg`, `find`).
|
|
415
|
+
2. If no match, use the `createWorkflow` tool:
|
|
416
|
+
```
|
|
417
|
+
createWorkflow({
|
|
418
|
+
slug: "failed-stripe-payments",
|
|
419
|
+
intent_summary: "Checks Stripe for failed payments for a given customer",
|
|
420
|
+
inputs: {
|
|
421
|
+
customer_id: { type: "string", required: true, description: "The Stripe customer ID" },
|
|
422
|
+
days_back: { type: "number", required: false, default: 7, description: "Days to look back" }
|
|
423
|
+
}
|
|
424
|
+
})
|
|
425
|
+
```
|
|
426
|
+
3. Implement the workflow files:
|
|
427
|
+
- Edit `run.py` — Implement Stripe API logic with argparse for inputs
|
|
428
|
+
- Edit `requirements.txt` — Add `stripe` dependency (no version specifier)
|
|
429
|
+
- Edit `.env` — Add `STRIPE_API_KEY` (never commit)
|
|
430
|
+
- Edit `.env.example` — Template with `STRIPE_API_KEY=sk_test_...`
|
|
431
|
+
- Create `.venv/` immediately after `createWorkflow` — run `cd workflows/failed-stripe-payments && python -m venv .venv` (or `python3 -m venv .venv`)
|
|
432
|
+
- Update `requirements.lock.txt` — Run `pip freeze > requirements.lock.txt` after installing
|
|
433
|
+
- Edit `README.md` — Document usage and required secrets
|
|
434
|
+
4. If unsure about Stripe API details, ask the user for help or search the web using your tools.
|
|
435
|
+
5. **Do NOT run the workflow directly** — inform the user that the workflow needs an engineer's approval before it can be executed via `runWorkflow`
|
|
436
|
+
|
|
437
|
+
## Example: Running an Existing Workflow
|
|
438
|
+
|
|
439
|
+
When asked to "Run the failed-stripe-payments workflow for customer cus_123":
|
|
440
|
+
|
|
441
|
+
1. **DO NOT** run the workflow entrypoint directly from shell (for example `python run.py` inside `workflows/<slug>/` or `python workflows/<slug>/run.py`)
|
|
442
|
+
2. Use the `runWorkflow` tool.
|
|
443
|
+
3. If the workflow is not approved, inform the user about the error and that they need to wait for an engineer's approval
|
|
444
|
+
4. If the workflow runs successfully, report the output to the user
|
|
445
|
+
|
|
446
|
+
## Example: Finding a workflow to run
|
|
447
|
+
When the user does not specify a workflow to run, you MUST use the `findSimilarWorkflow` tool to find a workflow to run. You may use `listAvailableWorkflows` first when you need to quickly inspect all accessible options. For example, if the user asks "How many users do I have in my app?"
|
|
448
|
+
|
|
449
|
+
1. **DO NOT** search using shell commands (for example `grep`, `rg`, or `find`) to search the repository for workflows.
|
|
450
|
+
2. Use the `findSimilarWorkflow` tool with an argument like "Count number of users in the app", which will return a list of similar workflows based on semantic similarity to the query.
|
|
451
|
+
3. Inspect each workflow's workflow.json and README.md to determine if it is the correct workflow to run. If unclear, ask the user for clarification.
|
|
452
|
+
4. Once you have found the correct workflow, run it using the `runWorkflow` tool.
|
|
453
|
+
5. If no relevant workflow found, then inform the user and ask them if you should create a new workflow to handle the request.
|
|
454
|
+
|
|
455
|
+
## Example: Listing Available Workflows
|
|
456
|
+
|
|
457
|
+
When you need a quick inventory before semantic search or selection:
|
|
458
|
+
|
|
459
|
+
1. Use `listAvailableWorkflows` to get all accessible workflows.
|
|
460
|
+
2. If needed, then use `findSimilarWorkflow` to rank by semantic relevance.
|
|
461
|
+
3. Choose the best candidate and proceed with `runWorkflow` (or update/create flow as needed).
|
|
462
|
+
|
|
463
|
+
## Example: Finding and Using a Skill
|
|
464
|
+
|
|
465
|
+
When a user asks for behavior that may already be captured as reusable instructions:
|
|
466
|
+
|
|
467
|
+
1. Use `findSkill` with a natural-language query for the needed capability.
|
|
468
|
+
2. For promising matches, use `getSkillContent` to inspect `SKILL.md`.
|
|
469
|
+
3. If a skill fits, follow that skill's instructions.
|
|
470
|
+
4. If no approved + accessible skill fits, ask whether to create one and then use `createSkill`.
|
|
471
|
+
|
|
472
|
+
## Example: Creating a New Skill
|
|
473
|
+
|
|
474
|
+
When asked to create a reusable skill:
|
|
475
|
+
|
|
476
|
+
1. Use `findSkill` first to avoid duplicates.
|
|
477
|
+
2. Optionally use `listAvailableSkills` if you need a full inventory before selecting a candidate.
|
|
478
|
+
3. If no good match exists, use `createSkill` with:
|
|
479
|
+
- `slug`
|
|
480
|
+
- `description`
|
|
481
|
+
- markdown `content`
|
|
482
|
+
4. Approve the permission prompt when asked during `createSkill` execution.
|
|
483
|
+
5. Inform the user that the new skill must be engineer-approved before it becomes generally usable through skill lookup flows.
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "workspace_files",
|
|
3
|
+
"lockfileVersion": 3,
|
|
4
|
+
"requires": true,
|
|
5
|
+
"packages": {
|
|
6
|
+
"": {
|
|
7
|
+
"dependencies": {
|
|
8
|
+
"opencode-ai": "1.1.65"
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
"node_modules/opencode-ai": {
|
|
12
|
+
"version": "1.1.65",
|
|
13
|
+
"resolved": "https://registry.npmjs.org/opencode-ai/-/opencode-ai-1.1.65.tgz",
|
|
14
|
+
"integrity": "sha512-GJ2YBt6vchSW/LdB1MvZln4vfl5M9lLGQi4p/ATLk3Ku2S0R5zw1aswYp0b00URpwmknZt652t/7mutBSBuzJg==",
|
|
15
|
+
"hasInstallScript": true,
|
|
16
|
+
"license": "MIT",
|
|
17
|
+
"bin": {
|
|
18
|
+
"opencode": "bin/opencode"
|
|
19
|
+
},
|
|
20
|
+
"optionalDependencies": {
|
|
21
|
+
"opencode-darwin-arm64": "1.1.65",
|
|
22
|
+
"opencode-darwin-x64": "1.1.65",
|
|
23
|
+
"opencode-darwin-x64-baseline": "1.1.65",
|
|
24
|
+
"opencode-linux-arm64": "1.1.65",
|
|
25
|
+
"opencode-linux-arm64-musl": "1.1.65",
|
|
26
|
+
"opencode-linux-x64": "1.1.65",
|
|
27
|
+
"opencode-linux-x64-baseline": "1.1.65",
|
|
28
|
+
"opencode-linux-x64-baseline-musl": "1.1.65",
|
|
29
|
+
"opencode-linux-x64-musl": "1.1.65",
|
|
30
|
+
"opencode-windows-x64": "1.1.65",
|
|
31
|
+
"opencode-windows-x64-baseline": "1.1.65"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"node_modules/opencode-darwin-arm64": {
|
|
35
|
+
"version": "1.1.65",
|
|
36
|
+
"resolved": "https://registry.npmjs.org/opencode-darwin-arm64/-/opencode-darwin-arm64-1.1.65.tgz",
|
|
37
|
+
"integrity": "sha512-NR4S0EbyIS93E7viEa68kecDbQ3qB8bfDP8s8uqFR/+oJY5CFlpCXe1eR0ar15r3U7UqoWbQXSQQWk+G0Kv2dA==",
|
|
38
|
+
"cpu": [
|
|
39
|
+
"arm64"
|
|
40
|
+
],
|
|
41
|
+
"optional": true,
|
|
42
|
+
"os": [
|
|
43
|
+
"darwin"
|
|
44
|
+
]
|
|
45
|
+
},
|
|
46
|
+
"node_modules/opencode-darwin-x64": {
|
|
47
|
+
"version": "1.1.65",
|
|
48
|
+
"resolved": "https://registry.npmjs.org/opencode-darwin-x64/-/opencode-darwin-x64-1.1.65.tgz",
|
|
49
|
+
"integrity": "sha512-lDNSbK85iETnXfNVs4+PGnSXl61IIL+QkaJVUIo2GwLtPUGq4RZA7MqIn3wwP959+Y9hbgjQhomv1RiMNiq1yg==",
|
|
50
|
+
"cpu": [
|
|
51
|
+
"x64"
|
|
52
|
+
],
|
|
53
|
+
"optional": true,
|
|
54
|
+
"os": [
|
|
55
|
+
"darwin"
|
|
56
|
+
]
|
|
57
|
+
},
|
|
58
|
+
"node_modules/opencode-darwin-x64-baseline": {
|
|
59
|
+
"version": "1.1.65",
|
|
60
|
+
"resolved": "https://registry.npmjs.org/opencode-darwin-x64-baseline/-/opencode-darwin-x64-baseline-1.1.65.tgz",
|
|
61
|
+
"integrity": "sha512-ImIMEiUzDkG5kpN5OQPoumIykUfrQem/PTNIrgUDbUthP67MUoNIHq1ff+Rs7RYu6mTmlVM10qvy99aNtTgf7w==",
|
|
62
|
+
"cpu": [
|
|
63
|
+
"x64"
|
|
64
|
+
],
|
|
65
|
+
"optional": true,
|
|
66
|
+
"os": [
|
|
67
|
+
"darwin"
|
|
68
|
+
]
|
|
69
|
+
},
|
|
70
|
+
"node_modules/opencode-linux-arm64": {
|
|
71
|
+
"version": "1.1.65",
|
|
72
|
+
"resolved": "https://registry.npmjs.org/opencode-linux-arm64/-/opencode-linux-arm64-1.1.65.tgz",
|
|
73
|
+
"integrity": "sha512-WWWoFJoqnkPvxLUbd59xlSKRWJuAvxKOkZqxnj9AjRD5rexgdfsDbTkL8Vu6peaRK0sqP1erfUGQzNrTleK5YA==",
|
|
74
|
+
"cpu": [
|
|
75
|
+
"arm64"
|
|
76
|
+
],
|
|
77
|
+
"optional": true,
|
|
78
|
+
"os": [
|
|
79
|
+
"linux"
|
|
80
|
+
]
|
|
81
|
+
},
|
|
82
|
+
"node_modules/opencode-linux-arm64-musl": {
|
|
83
|
+
"version": "1.1.65",
|
|
84
|
+
"resolved": "https://registry.npmjs.org/opencode-linux-arm64-musl/-/opencode-linux-arm64-musl-1.1.65.tgz",
|
|
85
|
+
"integrity": "sha512-I6Hqn7QXHFLMiVaDIROMPzDdiBayqrBzzbpSjHUswk9XcKdAIyZ8yARh+G42Kq6RoFriqiZbup9WCYjZEFdFWQ==",
|
|
86
|
+
"cpu": [
|
|
87
|
+
"arm64"
|
|
88
|
+
],
|
|
89
|
+
"optional": true,
|
|
90
|
+
"os": [
|
|
91
|
+
"linux"
|
|
92
|
+
]
|
|
93
|
+
},
|
|
94
|
+
"node_modules/opencode-linux-x64": {
|
|
95
|
+
"version": "1.1.65",
|
|
96
|
+
"resolved": "https://registry.npmjs.org/opencode-linux-x64/-/opencode-linux-x64-1.1.65.tgz",
|
|
97
|
+
"integrity": "sha512-4YVnpvq2QmU/rYcE5DkvMAUP+StgWEFaNqzJhJjDH8wfKv/5oE7WEMs60RwbszKkGZUzHCp/V+Ldp0YYwhQhEA==",
|
|
98
|
+
"cpu": [
|
|
99
|
+
"x64"
|
|
100
|
+
],
|
|
101
|
+
"optional": true,
|
|
102
|
+
"os": [
|
|
103
|
+
"linux"
|
|
104
|
+
]
|
|
105
|
+
},
|
|
106
|
+
"node_modules/opencode-linux-x64-baseline": {
|
|
107
|
+
"version": "1.1.65",
|
|
108
|
+
"resolved": "https://registry.npmjs.org/opencode-linux-x64-baseline/-/opencode-linux-x64-baseline-1.1.65.tgz",
|
|
109
|
+
"integrity": "sha512-TB71tNSa6oAsbhSEdQZE4/hM0hD6TZBmWnvbXpQPWntK3NyGcEUjw2b1B5yulGwA/MrXHkwrFhcbknrb4B/RAw==",
|
|
110
|
+
"cpu": [
|
|
111
|
+
"x64"
|
|
112
|
+
],
|
|
113
|
+
"optional": true,
|
|
114
|
+
"os": [
|
|
115
|
+
"linux"
|
|
116
|
+
]
|
|
117
|
+
},
|
|
118
|
+
"node_modules/opencode-linux-x64-baseline-musl": {
|
|
119
|
+
"version": "1.1.65",
|
|
120
|
+
"resolved": "https://registry.npmjs.org/opencode-linux-x64-baseline-musl/-/opencode-linux-x64-baseline-musl-1.1.65.tgz",
|
|
121
|
+
"integrity": "sha512-5yqbO3aFax31VeXyg9FmuIXzfSheE2OmLDq1LSfQPI2KrwlilUB+n5oRscUDb/U4PQqRdJajwjqqwV4WTF7pZw==",
|
|
122
|
+
"cpu": [
|
|
123
|
+
"x64"
|
|
124
|
+
],
|
|
125
|
+
"optional": true,
|
|
126
|
+
"os": [
|
|
127
|
+
"linux"
|
|
128
|
+
]
|
|
129
|
+
},
|
|
130
|
+
"node_modules/opencode-linux-x64-musl": {
|
|
131
|
+
"version": "1.1.65",
|
|
132
|
+
"resolved": "https://registry.npmjs.org/opencode-linux-x64-musl/-/opencode-linux-x64-musl-1.1.65.tgz",
|
|
133
|
+
"integrity": "sha512-N9caP6J3U9qmtsR2onwUEBWhtbi2URs8Jbbbq71RFSuA/Z1zuksYjmNlO0NZj9lauwEl2zWlsEgmQxAfcZxrOQ==",
|
|
134
|
+
"cpu": [
|
|
135
|
+
"x64"
|
|
136
|
+
],
|
|
137
|
+
"optional": true,
|
|
138
|
+
"os": [
|
|
139
|
+
"linux"
|
|
140
|
+
]
|
|
141
|
+
},
|
|
142
|
+
"node_modules/opencode-windows-x64": {
|
|
143
|
+
"version": "1.1.65",
|
|
144
|
+
"resolved": "https://registry.npmjs.org/opencode-windows-x64/-/opencode-windows-x64-1.1.65.tgz",
|
|
145
|
+
"integrity": "sha512-RJbkQ7mCpQrlIDax8VjK5tN/7Gi92ERdRpwbxSf9nJx+MaWoV06W6nazDsg+OfqTja6fMy8N1G4eRnOrcbVciQ==",
|
|
146
|
+
"cpu": [
|
|
147
|
+
"x64"
|
|
148
|
+
],
|
|
149
|
+
"optional": true,
|
|
150
|
+
"os": [
|
|
151
|
+
"win32"
|
|
152
|
+
]
|
|
153
|
+
},
|
|
154
|
+
"node_modules/opencode-windows-x64-baseline": {
|
|
155
|
+
"version": "1.1.65",
|
|
156
|
+
"resolved": "https://registry.npmjs.org/opencode-windows-x64-baseline/-/opencode-windows-x64-baseline-1.1.65.tgz",
|
|
157
|
+
"integrity": "sha512-sj7+EYkoFsRjpPBBMjI2PKu3eA1xQdGke4V0DvyJCqlq14TvYlY/S4xo7oZBZ9h+cG2Ni99SjeZ187KHq/CtRw==",
|
|
158
|
+
"cpu": [
|
|
159
|
+
"x64"
|
|
160
|
+
],
|
|
161
|
+
"optional": true,
|
|
162
|
+
"os": [
|
|
163
|
+
"win32"
|
|
164
|
+
]
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|