Compare commits
5 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
a30945312a | ||
![]() |
bf682302ee | ||
![]() |
72191f5b13 | ||
![]() |
e324e59930 | ||
![]() |
727caccfc9 |
2
.github/DISCUSSION_TEMPLATE/general.yml
vendored
2
.github/DISCUSSION_TEMPLATE/general.yml
vendored
@ -9,7 +9,7 @@ body:
|
|||||||
required: true
|
required: true
|
||||||
- label: I confirm that I am using English to submit this report (我已阅读并同意 [Language Policy](https://github.com/langgenius/dify/issues/1542)).
|
- label: I confirm that I am using English to submit this report (我已阅读并同意 [Language Policy](https://github.com/langgenius/dify/issues/1542)).
|
||||||
required: true
|
required: true
|
||||||
- label: "[FOR CHINESE USERS] 请务必使用英文提交 Issue,否则会被关闭。谢谢!:)"
|
- label: "[FOR CHINESE USERS] 请务必使用英文提交 Issue,否则会被关闭。谢谢!:)"
|
||||||
required: true
|
required: true
|
||||||
- label: "Please do not modify this template :) and fill in all the required fields."
|
- label: "Please do not modify this template :) and fill in all the required fields."
|
||||||
required: true
|
required: true
|
||||||
|
2
.github/DISCUSSION_TEMPLATE/help.yml
vendored
2
.github/DISCUSSION_TEMPLATE/help.yml
vendored
@ -9,7 +9,7 @@ body:
|
|||||||
required: true
|
required: true
|
||||||
- label: I confirm that I am using English to submit this report (我已阅读并同意 [Language Policy](https://github.com/langgenius/dify/issues/1542)).
|
- label: I confirm that I am using English to submit this report (我已阅读并同意 [Language Policy](https://github.com/langgenius/dify/issues/1542)).
|
||||||
required: true
|
required: true
|
||||||
- label: "[FOR CHINESE USERS] 请务必使用英文提交 Issue,否则会被关闭。谢谢!:)"
|
- label: "[FOR CHINESE USERS] 请务必使用英文提交 Issue,否则会被关闭。谢谢!:)"
|
||||||
required: true
|
required: true
|
||||||
- label: "Please do not modify this template :) and fill in all the required fields."
|
- label: "Please do not modify this template :) and fill in all the required fields."
|
||||||
required: true
|
required: true
|
||||||
|
2
.github/DISCUSSION_TEMPLATE/suggestion.yml
vendored
2
.github/DISCUSSION_TEMPLATE/suggestion.yml
vendored
@ -9,7 +9,7 @@ body:
|
|||||||
required: true
|
required: true
|
||||||
- label: I confirm that I am using English to submit this report (我已阅读并同意 [Language Policy](https://github.com/langgenius/dify/issues/1542)).
|
- label: I confirm that I am using English to submit this report (我已阅读并同意 [Language Policy](https://github.com/langgenius/dify/issues/1542)).
|
||||||
required: true
|
required: true
|
||||||
- label: "[FOR CHINESE USERS] 请务必使用英文提交 Issue,否则会被关闭。谢谢!:)"
|
- label: "[FOR CHINESE USERS] 请务必使用英文提交 Issue,否则会被关闭。谢谢!:)"
|
||||||
required: true
|
required: true
|
||||||
- label: "Please do not modify this template :) and fill in all the required fields."
|
- label: "Please do not modify this template :) and fill in all the required fields."
|
||||||
required: true
|
required: true
|
||||||
|
2
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
2
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@ -14,7 +14,7 @@ body:
|
|||||||
required: true
|
required: true
|
||||||
- label: I confirm that I am using English to submit this report (我已阅读并同意 [Language Policy](https://github.com/langgenius/dify/issues/1542)).
|
- label: I confirm that I am using English to submit this report (我已阅读并同意 [Language Policy](https://github.com/langgenius/dify/issues/1542)).
|
||||||
required: true
|
required: true
|
||||||
- label: "[FOR CHINESE USERS] 请务必使用英文提交 Issue,否则会被关闭。谢谢!:)"
|
- label: "[FOR CHINESE USERS] 请务必使用英文提交 Issue,否则会被关闭。谢谢!:)"
|
||||||
required: true
|
required: true
|
||||||
- label: "Please do not modify this template :) and fill in all the required fields."
|
- label: "Please do not modify this template :) and fill in all the required fields."
|
||||||
required: true
|
required: true
|
||||||
|
2
.github/ISSUE_TEMPLATE/document_issue.yml
vendored
2
.github/ISSUE_TEMPLATE/document_issue.yml
vendored
@ -12,7 +12,7 @@ body:
|
|||||||
required: true
|
required: true
|
||||||
- label: I confirm that I am using English to submit report (我已阅读并同意 [Language Policy](https://github.com/langgenius/dify/issues/1542)).
|
- label: I confirm that I am using English to submit report (我已阅读并同意 [Language Policy](https://github.com/langgenius/dify/issues/1542)).
|
||||||
required: true
|
required: true
|
||||||
- label: "[FOR CHINESE USERS] 请务必使用英文提交 Issue,否则会被关闭。谢谢!:)"
|
- label: "[FOR CHINESE USERS] 请务必使用英文提交 Issue,否则会被关闭。谢谢!:)"
|
||||||
required: true
|
required: true
|
||||||
- label: "Please do not modify this template :) and fill in all the required fields."
|
- label: "Please do not modify this template :) and fill in all the required fields."
|
||||||
required: true
|
required: true
|
||||||
|
2
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
2
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
@ -12,7 +12,7 @@ body:
|
|||||||
required: true
|
required: true
|
||||||
- label: I confirm that I am using English to submit this report (我已阅读并同意 [Language Policy](https://github.com/langgenius/dify/issues/1542)).
|
- label: I confirm that I am using English to submit this report (我已阅读并同意 [Language Policy](https://github.com/langgenius/dify/issues/1542)).
|
||||||
required: true
|
required: true
|
||||||
- label: "[FOR CHINESE USERS] 请务必使用英文提交 Issue,否则会被关闭。谢谢!:)"
|
- label: "[FOR CHINESE USERS] 请务必使用英文提交 Issue,否则会被关闭。谢谢!:)"
|
||||||
required: true
|
required: true
|
||||||
- label: "Please do not modify this template :) and fill in all the required fields."
|
- label: "Please do not modify this template :) and fill in all the required fields."
|
||||||
required: true
|
required: true
|
||||||
|
2
.github/ISSUE_TEMPLATE/tracker.yml
vendored
2
.github/ISSUE_TEMPLATE/tracker.yml
vendored
@ -1,5 +1,5 @@
|
|||||||
name: "👾 Tracker"
|
name: "👾 Tracker"
|
||||||
description: For inner usages, please donot use this template.
|
description: For inner usages, please do not use this template.
|
||||||
title: "[Tracker] "
|
title: "[Tracker] "
|
||||||
labels:
|
labels:
|
||||||
- tracker
|
- tracker
|
||||||
|
4
.github/ISSUE_TEMPLATE/translation_issue.yml
vendored
4
.github/ISSUE_TEMPLATE/translation_issue.yml
vendored
@ -1,5 +1,5 @@
|
|||||||
name: "🌐 Localization/Translation issue"
|
name: "🌐 Localization/Translation issue"
|
||||||
description: Report incorrect translations. [please use English :)]
|
description: Report incorrect translations. [please use English :)]
|
||||||
labels:
|
labels:
|
||||||
- translation
|
- translation
|
||||||
body:
|
body:
|
||||||
@ -12,7 +12,7 @@ body:
|
|||||||
required: true
|
required: true
|
||||||
- label: I confirm that I am using English to submit this report (我已阅读并同意 [Language Policy](https://github.com/langgenius/dify/issues/1542)).
|
- label: I confirm that I am using English to submit this report (我已阅读并同意 [Language Policy](https://github.com/langgenius/dify/issues/1542)).
|
||||||
required: true
|
required: true
|
||||||
- label: "[FOR CHINESE USERS] 请务必使用英文提交 Issue,否则会被关闭。谢谢!:)"
|
- label: "[FOR CHINESE USERS] 请务必使用英文提交 Issue,否则会被关闭。谢谢!:)"
|
||||||
required: true
|
required: true
|
||||||
- label: "Please do not modify this template :) and fill in all the required fields."
|
- label: "Please do not modify this template :) and fill in all the required fields."
|
||||||
required: true
|
required: true
|
||||||
|
@ -12,6 +12,7 @@ from configs import dify_config
|
|||||||
from constants.languages import languages
|
from constants.languages import languages
|
||||||
from core.rag.datasource.vdb.vector_factory import Vector
|
from core.rag.datasource.vdb.vector_factory import Vector
|
||||||
from core.rag.datasource.vdb.vector_type import VectorType
|
from core.rag.datasource.vdb.vector_type import VectorType
|
||||||
|
from core.rag.index_processor.constant.built_in_field import BuiltInField
|
||||||
from core.rag.models.document import Document
|
from core.rag.models.document import Document
|
||||||
from events.app_event import app_was_created
|
from events.app_event import app_was_created
|
||||||
from extensions.ext_database import db
|
from extensions.ext_database import db
|
||||||
@ -559,36 +560,25 @@ def old_metadata_migration():
|
|||||||
if document.doc_metadata:
|
if document.doc_metadata:
|
||||||
doc_metadata = document.doc_metadata
|
doc_metadata = document.doc_metadata
|
||||||
for key, value in doc_metadata.items():
|
for key, value in doc_metadata.items():
|
||||||
dataset_metadata = (
|
for field in BuiltInField:
|
||||||
db.session.query(DatasetMetadata)
|
if field.value == key:
|
||||||
.filter(DatasetMetadata.dataset_id == document.dataset_id, DatasetMetadata.name == key)
|
break
|
||||||
.first()
|
|
||||||
)
|
|
||||||
if not dataset_metadata:
|
|
||||||
dataset_metadata = DatasetMetadata(
|
|
||||||
tenant_id=document.tenant_id,
|
|
||||||
dataset_id=document.dataset_id,
|
|
||||||
name=key,
|
|
||||||
type="string",
|
|
||||||
created_by=document.created_by,
|
|
||||||
)
|
|
||||||
db.session.add(dataset_metadata)
|
|
||||||
db.session.flush()
|
|
||||||
dataset_metadata_binding = DatasetMetadataBinding(
|
|
||||||
tenant_id=document.tenant_id,
|
|
||||||
dataset_id=document.dataset_id,
|
|
||||||
metadata_id=dataset_metadata.id,
|
|
||||||
document_id=document.id,
|
|
||||||
created_by=document.created_by,
|
|
||||||
)
|
|
||||||
db.session.add(dataset_metadata_binding)
|
|
||||||
else:
|
else:
|
||||||
dataset_metadata_binding = DatasetMetadataBinding.query.filter(
|
dataset_metadata = (
|
||||||
DatasetMetadataBinding.dataset_id == document.dataset_id,
|
db.session.query(DatasetMetadata)
|
||||||
DatasetMetadataBinding.document_id == document.id,
|
.filter(DatasetMetadata.dataset_id == document.dataset_id, DatasetMetadata.name == key)
|
||||||
DatasetMetadataBinding.metadata_id == dataset_metadata.id,
|
.first()
|
||||||
).first()
|
)
|
||||||
if not dataset_metadata_binding:
|
if not dataset_metadata:
|
||||||
|
dataset_metadata = DatasetMetadata(
|
||||||
|
tenant_id=document.tenant_id,
|
||||||
|
dataset_id=document.dataset_id,
|
||||||
|
name=key,
|
||||||
|
type="string",
|
||||||
|
created_by=document.created_by,
|
||||||
|
)
|
||||||
|
db.session.add(dataset_metadata)
|
||||||
|
db.session.flush()
|
||||||
dataset_metadata_binding = DatasetMetadataBinding(
|
dataset_metadata_binding = DatasetMetadataBinding(
|
||||||
tenant_id=document.tenant_id,
|
tenant_id=document.tenant_id,
|
||||||
dataset_id=document.dataset_id,
|
dataset_id=document.dataset_id,
|
||||||
@ -597,7 +587,22 @@ def old_metadata_migration():
|
|||||||
created_by=document.created_by,
|
created_by=document.created_by,
|
||||||
)
|
)
|
||||||
db.session.add(dataset_metadata_binding)
|
db.session.add(dataset_metadata_binding)
|
||||||
db.session.commit()
|
else:
|
||||||
|
dataset_metadata_binding = DatasetMetadataBinding.query.filter(
|
||||||
|
DatasetMetadataBinding.dataset_id == document.dataset_id,
|
||||||
|
DatasetMetadataBinding.document_id == document.id,
|
||||||
|
DatasetMetadataBinding.metadata_id == dataset_metadata.id,
|
||||||
|
).first()
|
||||||
|
if not dataset_metadata_binding:
|
||||||
|
dataset_metadata_binding = DatasetMetadataBinding(
|
||||||
|
tenant_id=document.tenant_id,
|
||||||
|
dataset_id=document.dataset_id,
|
||||||
|
metadata_id=dataset_metadata.id,
|
||||||
|
document_id=document.id,
|
||||||
|
created_by=document.created_by,
|
||||||
|
)
|
||||||
|
db.session.add(dataset_metadata_binding)
|
||||||
|
db.session.commit()
|
||||||
page += 1
|
page += 1
|
||||||
click.echo(click.style("Old metadata migration completed.", fg="green"))
|
click.echo(click.style("Old metadata migration completed.", fg="green"))
|
||||||
|
|
||||||
|
@ -66,7 +66,7 @@ class DatasetMetadataServiceApi(DatasetApiResource):
|
|||||||
metadata = MetadataService.update_metadata_name(dataset_id_str, metadata_id_str, args.get("name"))
|
metadata = MetadataService.update_metadata_name(dataset_id_str, metadata_id_str, args.get("name"))
|
||||||
return marshal(metadata, dataset_metadata_fields), 200
|
return marshal(metadata, dataset_metadata_fields), 200
|
||||||
|
|
||||||
def delete(self, dataset_id, metadata_id):
|
def delete(self, tenant_id, dataset_id, metadata_id):
|
||||||
dataset_id_str = str(dataset_id)
|
dataset_id_str = str(dataset_id)
|
||||||
metadata_id_str = str(metadata_id)
|
metadata_id_str = str(metadata_id)
|
||||||
dataset = DatasetService.get_dataset(dataset_id_str)
|
dataset = DatasetService.get_dataset(dataset_id_str)
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
- 支持 5 种模型类型的能力调用
|
- 支持 5 种模型类型的能力调用
|
||||||
|
|
||||||
- `LLM` - LLM 文本补全、对话,预计算 tokens 能力
|
- `LLM` - LLM 文本补全、对话,预计算 tokens 能力
|
||||||
- `Text Embedidng Model` - 文本 Embedding ,预计算 tokens 能力
|
- `Text Embedding Model` - 文本 Embedding ,预计算 tokens 能力
|
||||||
- `Rerank Model` - 分段 Rerank 能力
|
- `Rerank Model` - 分段 Rerank 能力
|
||||||
- `Speech-to-text Model` - 语音转文本能力
|
- `Speech-to-text Model` - 语音转文本能力
|
||||||
- `Text-to-speech Model` - 文本转语音能力
|
- `Text-to-speech Model` - 文本转语音能力
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
from ast import literal_eval
|
import json
|
||||||
from collections.abc import Generator, Mapping, Sequence
|
from collections.abc import Generator, Mapping, Sequence
|
||||||
from typing import Any, cast
|
from typing import Any, cast
|
||||||
|
|
||||||
@ -143,15 +143,23 @@ class AgentNode(ToolNode):
|
|||||||
raise ValueError(f"Variable {agent_input.value} does not exist")
|
raise ValueError(f"Variable {agent_input.value} does not exist")
|
||||||
parameter_value = variable.value
|
parameter_value = variable.value
|
||||||
elif agent_input.type in {"mixed", "constant"}:
|
elif agent_input.type in {"mixed", "constant"}:
|
||||||
segment_group = variable_pool.convert_template(str(agent_input.value))
|
# variable_pool.convert_template expects a string template,
|
||||||
|
# but if passing a dict, convert to JSON string first before rendering
|
||||||
|
try:
|
||||||
|
parameter_value = json.dumps(agent_input.value, ensure_ascii=False)
|
||||||
|
except TypeError:
|
||||||
|
parameter_value = str(agent_input.value)
|
||||||
|
segment_group = variable_pool.convert_template(parameter_value)
|
||||||
parameter_value = segment_group.log if for_log else segment_group.text
|
parameter_value = segment_group.log if for_log else segment_group.text
|
||||||
|
# variable_pool.convert_template returns a string,
|
||||||
|
# so we need to convert it back to a dictionary
|
||||||
|
try:
|
||||||
|
parameter_value = json.loads(parameter_value)
|
||||||
|
except json.JSONDecodeError:
|
||||||
|
parameter_value = parameter_value
|
||||||
else:
|
else:
|
||||||
raise ValueError(f"Unknown agent input type '{agent_input.type}'")
|
raise ValueError(f"Unknown agent input type '{agent_input.type}'")
|
||||||
value = parameter_value.strip()
|
value = parameter_value
|
||||||
if (parameter_value.startswith("{") and parameter_value.endswith("}")) or (
|
|
||||||
parameter_value.startswith("[") and parameter_value.endswith("]")
|
|
||||||
):
|
|
||||||
value = literal_eval(parameter_value) # transform string to python object
|
|
||||||
if parameter.type == "array[tools]":
|
if parameter.type == "array[tools]":
|
||||||
value = cast(list[dict[str, Any]], value)
|
value = cast(list[dict[str, Any]], value)
|
||||||
value = [tool for tool in value if tool.get("enabled", False)]
|
value = [tool for tool in value if tool.get("enabled", False)]
|
||||||
|
@ -68,7 +68,7 @@ DEBUG=false
|
|||||||
# which is convenient for debugging.
|
# which is convenient for debugging.
|
||||||
FLASK_DEBUG=false
|
FLASK_DEBUG=false
|
||||||
|
|
||||||
# A secretkey that is used for securely signing the session cookie
|
# A secret key that is used for securely signing the session cookie
|
||||||
# and encrypting sensitive information on the database.
|
# and encrypting sensitive information on the database.
|
||||||
# You can generate a strong key using `openssl rand -base64 42`.
|
# You can generate a strong key using `openssl rand -base64 42`.
|
||||||
SECRET_KEY=sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U
|
SECRET_KEY=sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U
|
||||||
@ -76,7 +76,7 @@ SECRET_KEY=sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U
|
|||||||
# Password for admin user initialization.
|
# Password for admin user initialization.
|
||||||
# If left unset, admin user will not be prompted for a password
|
# If left unset, admin user will not be prompted for a password
|
||||||
# when creating the initial admin account.
|
# when creating the initial admin account.
|
||||||
# The length of the password cannot exceed 30 charactors.
|
# The length of the password cannot exceed 30 characters.
|
||||||
INIT_PASSWORD=
|
INIT_PASSWORD=
|
||||||
|
|
||||||
# Deployment environment.
|
# Deployment environment.
|
||||||
|
@ -27,7 +27,7 @@ Welcome to the new `docker` directory for deploying Dify using Docker Compose. T
|
|||||||
- Execute `docker compose up` from the `docker` directory to start the services.
|
- Execute `docker compose up` from the `docker` directory to start the services.
|
||||||
- To specify a vector database, set the `VECTOR_STORE` variable in your `.env` file to your desired vector database service, such as `milvus`, `weaviate`, or `opensearch`.
|
- To specify a vector database, set the `VECTOR_STORE` variable in your `.env` file to your desired vector database service, such as `milvus`, `weaviate`, or `opensearch`.
|
||||||
4. **SSL Certificate Setup**:
|
4. **SSL Certificate Setup**:
|
||||||
- Rrefer `docker/certbot/README.md` to set up SSL certificates using Certbot.
|
- Refer `docker/certbot/README.md` to set up SSL certificates using Certbot.
|
||||||
|
|
||||||
### How to Deploy Middleware for Developing Dify
|
### How to Deploy Middleware for Developing Dify
|
||||||
|
|
||||||
@ -54,7 +54,7 @@ For users migrating from the `docker-legacy` setup:
|
|||||||
|
|
||||||
- **Vector Database Services**: Depending on the type of vector database used (`VECTOR_STORE`), users can set specific endpoints, ports, and authentication details.
|
- **Vector Database Services**: Depending on the type of vector database used (`VECTOR_STORE`), users can set specific endpoints, ports, and authentication details.
|
||||||
- **Storage Services**: Depending on the storage type (`STORAGE_TYPE`), users can configure specific settings for S3, Azure Blob, Google Storage, etc.
|
- **Storage Services**: Depending on the storage type (`STORAGE_TYPE`), users can configure specific settings for S3, Azure Blob, Google Storage, etc.
|
||||||
- **API and Web Services**: Users can define URLs and other settings that affect how the API and web frontends operate.
|
- **API and Web Services**: Users can define URLs and other settings that affect how the API and web frontend operate.
|
||||||
|
|
||||||
#### Other notable variables
|
#### Other notable variables
|
||||||
|
|
||||||
|
@ -481,7 +481,7 @@ const translation = {
|
|||||||
},
|
},
|
||||||
retrieveMultiWay: {
|
retrieveMultiWay: {
|
||||||
title: 'Multi-path retrieval',
|
title: 'Multi-path retrieval',
|
||||||
description: 'Based on user intent, queries across all Knowledge, retrieves relevant text from multi-sources, and selects the best results matching the user query after reranking. ',
|
description: 'Based on user intent, queries across all Knowledge, retrieves relevant text from multi-sources, and selects the best results matching the user query after reranking.',
|
||||||
},
|
},
|
||||||
rerankModelRequired: 'A configured Rerank Model is required',
|
rerankModelRequired: 'A configured Rerank Model is required',
|
||||||
params: 'Params',
|
params: 'Params',
|
||||||
|
@ -19,7 +19,7 @@ const translation = {
|
|||||||
setAdminAccountDesc: 'Maximum privileges for admin account, which can be used to create applications and manage LLM providers, etc.',
|
setAdminAccountDesc: 'Maximum privileges for admin account, which can be used to create applications and manage LLM providers, etc.',
|
||||||
createAndSignIn: 'Create and sign in',
|
createAndSignIn: 'Create and sign in',
|
||||||
oneMoreStep: 'One more step',
|
oneMoreStep: 'One more step',
|
||||||
createSample: 'Based on this information, we’ll create sample application for you',
|
createSample: 'Based on this information, we\'ll create sample application for you',
|
||||||
invitationCode: 'Invitation Code',
|
invitationCode: 'Invitation Code',
|
||||||
invitationCodePlaceholder: 'Your invitation code',
|
invitationCodePlaceholder: 'Your invitation code',
|
||||||
interfaceLanguage: 'Interface Language',
|
interfaceLanguage: 'Interface Language',
|
||||||
|
@ -106,7 +106,7 @@ const translation = {
|
|||||||
step2Tip: '点击此处将仓库导入到 Vercel 中部署',
|
step2Tip: '点击此处将仓库导入到 Vercel 中部署',
|
||||||
step2Operation: '导入仓库',
|
step2Operation: '导入仓库',
|
||||||
step3: '配置环境变量',
|
step3: '配置环境变量',
|
||||||
step3Tip: '在 Vecel 环境变量中添加以下环境变量',
|
step3Tip: '在 Vercel 环境变量中添加以下环境变量',
|
||||||
},
|
},
|
||||||
way2: {
|
way2: {
|
||||||
name: '编写客户端调用 API 并部署到服务器中',
|
name: '编写客户端调用 API 并部署到服务器中',
|
||||||
|
@ -105,7 +105,7 @@ const translation = {
|
|||||||
step2Tip: '點選此處將倉庫匯入到 Vercel 中部署',
|
step2Tip: '點選此處將倉庫匯入到 Vercel 中部署',
|
||||||
step2Operation: '匯入倉庫',
|
step2Operation: '匯入倉庫',
|
||||||
step3: '配置環境變數',
|
step3: '配置環境變數',
|
||||||
step3Tip: '在 Vecel 環境變數中新增以下環境變數',
|
step3Tip: '在 Vercel 環境變數中新增以下環境變數',
|
||||||
},
|
},
|
||||||
way2: {
|
way2: {
|
||||||
name: '編寫客戶端呼叫 API 並部署到伺服器中',
|
name: '編寫客戶端呼叫 API 並部署到伺服器中',
|
||||||
|
@ -187,7 +187,8 @@ export const useInstallOrUpdate = ({
|
|||||||
if (item.type === 'github') {
|
if (item.type === 'github') {
|
||||||
const data = item as GitHubItemAndMarketPlaceDependency
|
const data = item as GitHubItemAndMarketPlaceDependency
|
||||||
// From local bundle don't have data.value.github_plugin_unique_identifier
|
// From local bundle don't have data.value.github_plugin_unique_identifier
|
||||||
if (!data.value.github_plugin_unique_identifier) {
|
uniqueIdentifier = data.value.github_plugin_unique_identifier!
|
||||||
|
if (!uniqueIdentifier) {
|
||||||
const { unique_identifier } = await post<uploadGitHubResponse>('/workspaces/current/plugin/upload/github', {
|
const { unique_identifier } = await post<uploadGitHubResponse>('/workspaces/current/plugin/upload/github', {
|
||||||
body: {
|
body: {
|
||||||
repo: data.value.repo!,
|
repo: data.value.repo!,
|
||||||
|
Loading…
Reference in New Issue
Block a user