intent-history 7.6.7__tar.gz
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.
- intent_history-7.6.7/.claude-plugin/marketplace.json +25 -0
- intent_history-7.6.7/.dockerignore +21 -0
- intent_history-7.6.7/.github/CODE_OF_CONDUCT.md +29 -0
- intent_history-7.6.7/.github/CONTRIBUTING.md +68 -0
- intent_history-7.6.7/.github/ISSUE_TEMPLATE/bug_report.md +38 -0
- intent_history-7.6.7/.github/ISSUE_TEMPLATE/feature_request.md +31 -0
- intent_history-7.6.7/.github/PULL_REQUEST_TEMPLATE.md +23 -0
- intent_history-7.6.7/.github/SECURITY.md +29 -0
- intent_history-7.6.7/.github/workflows/monitor.yml +29 -0
- intent_history-7.6.7/.github/workflows/publish.yml +37 -0
- intent_history-7.6.7/.github/workflows/test.yml +58 -0
- intent_history-7.6.7/.gitignore +45 -0
- intent_history-7.6.7/Dockerfile +46 -0
- intent_history-7.6.7/LICENSE +21 -0
- intent_history-7.6.7/PKG-INFO +190 -0
- intent_history-7.6.7/README.md +152 -0
- intent_history-7.6.7/README_CN.md +153 -0
- intent_history-7.6.7/SKILL.md +57 -0
- intent_history-7.6.7/SKILL_CN.md +55 -0
- intent_history-7.6.7/agents/openai.yaml +4 -0
- intent_history-7.6.7/apps/__init__.py +1 -0
- intent_history-7.6.7/apps/inthub_api/__init__.py +1 -0
- intent_history-7.6.7/apps/inthub_api/__main__.py +4 -0
- intent_history-7.6.7/apps/inthub_api/access.py +43 -0
- intent_history-7.6.7/apps/inthub_api/admin.py +91 -0
- intent_history-7.6.7/apps/inthub_api/auth.py +270 -0
- intent_history-7.6.7/apps/inthub_api/bind_tenon.py +24 -0
- intent_history-7.6.7/apps/inthub_api/common.py +32 -0
- intent_history-7.6.7/apps/inthub_api/db.py +97 -0
- intent_history-7.6.7/apps/inthub_api/db_connection.py +73 -0
- intent_history-7.6.7/apps/inthub_api/db_migrate.py +334 -0
- intent_history-7.6.7/apps/inthub_api/db_schema.py +449 -0
- intent_history-7.6.7/apps/inthub_api/device.py +120 -0
- intent_history-7.6.7/apps/inthub_api/history.py +212 -0
- intent_history-7.6.7/apps/inthub_api/http_auth.py +248 -0
- intent_history-7.6.7/apps/inthub_api/http_base.py +224 -0
- intent_history-7.6.7/apps/inthub_api/http_common.py +133 -0
- intent_history-7.6.7/apps/inthub_api/http_routes.py +200 -0
- intent_history-7.6.7/apps/inthub_api/limits.py +46 -0
- intent_history-7.6.7/apps/inthub_api/migrate.py +105 -0
- intent_history-7.6.7/apps/inthub_api/product_deletion.py +149 -0
- intent_history-7.6.7/apps/inthub_api/projects.py +129 -0
- intent_history-7.6.7/apps/inthub_api/queries.py +240 -0
- intent_history-7.6.7/apps/inthub_api/revisions.py +82 -0
- intent_history-7.6.7/apps/inthub_api/secret_scan.py +43 -0
- intent_history-7.6.7/apps/inthub_api/server.py +447 -0
- intent_history-7.6.7/apps/inthub_api/teams.py +266 -0
- intent_history-7.6.7/apps/inthub_api/tenon.py +220 -0
- intent_history-7.6.7/apps/inthub_local/__init__.py +1 -0
- intent_history-7.6.7/apps/inthub_local/__main__.py +5 -0
- intent_history-7.6.7/apps/inthub_local/launcher.py +111 -0
- intent_history-7.6.7/apps/inthub_web/__init__.py +30 -0
- intent_history-7.6.7/apps/inthub_web/__main__.py +4 -0
- intent_history-7.6.7/apps/inthub_web/server.py +104 -0
- intent_history-7.6.7/apps/inthub_web/static/404.html +20 -0
- intent_history-7.6.7/apps/inthub_web/static/Inter-LICENSE.txt +92 -0
- intent_history-7.6.7/apps/inthub_web/static/InterVariable.woff2 +0 -0
- intent_history-7.6.7/apps/inthub_web/static/auth-redirect.html +32 -0
- intent_history-7.6.7/apps/inthub_web/static/auth-redirect.js +64 -0
- intent_history-7.6.7/apps/inthub_web/static/css/base.css +159 -0
- intent_history-7.6.7/apps/inthub_web/static/css/brief.css +202 -0
- intent_history-7.6.7/apps/inthub_web/static/css/controls.css +318 -0
- intent_history-7.6.7/apps/inthub_web/static/css/dialogs.css +317 -0
- intent_history-7.6.7/apps/inthub_web/static/css/flow-cards.css +313 -0
- intent_history-7.6.7/apps/inthub_web/static/css/flow.css +265 -0
- intent_history-7.6.7/apps/inthub_web/static/css/header.css +359 -0
- intent_history-7.6.7/apps/inthub_web/static/css/lists.css +311 -0
- intent_history-7.6.7/apps/inthub_web/static/css/login-transition.css +108 -0
- intent_history-7.6.7/apps/inthub_web/static/css/menus.css +239 -0
- intent_history-7.6.7/apps/inthub_web/static/css/order.txt +25 -0
- intent_history-7.6.7/apps/inthub_web/static/css/page.css +258 -0
- intent_history-7.6.7/apps/inthub_web/static/css/relations.css +135 -0
- intent_history-7.6.7/apps/inthub_web/static/css/responsive-end.css +25 -0
- intent_history-7.6.7/apps/inthub_web/static/css/responsive-phone.css +358 -0
- intent_history-7.6.7/apps/inthub_web/static/css/responsive.css +50 -0
- intent_history-7.6.7/apps/inthub_web/static/css/search.css +218 -0
- intent_history-7.6.7/apps/inthub_web/static/css/settings.css +331 -0
- intent_history-7.6.7/apps/inthub_web/static/css/setup.css +207 -0
- intent_history-7.6.7/apps/inthub_web/static/css/sheet.css +344 -0
- intent_history-7.6.7/apps/inthub_web/static/css/signin.css +320 -0
- intent_history-7.6.7/apps/inthub_web/static/css/site-footer.css +114 -0
- intent_history-7.6.7/apps/inthub_web/static/css/site-pages.css +89 -0
- intent_history-7.6.7/apps/inthub_web/static/css/timeline.css +340 -0
- intent_history-7.6.7/apps/inthub_web/static/css/toast.css +40 -0
- intent_history-7.6.7/apps/inthub_web/static/css/tokens.css +123 -0
- intent_history-7.6.7/apps/inthub_web/static/help.js +87 -0
- intent_history-7.6.7/apps/inthub_web/static/i18n.js +322 -0
- intent_history-7.6.7/apps/inthub_web/static/index.html +377 -0
- intent_history-7.6.7/apps/inthub_web/static/inthub-mark.svg +11 -0
- intent_history-7.6.7/apps/inthub_web/static/js/api.js +75 -0
- intent_history-7.6.7/apps/inthub_web/static/js/auth.js +112 -0
- intent_history-7.6.7/apps/inthub_web/static/js/checkpoint.js +143 -0
- intent_history-7.6.7/apps/inthub_web/static/js/confirm.js +51 -0
- intent_history-7.6.7/apps/inthub_web/static/js/decisions.js +73 -0
- intent_history-7.6.7/apps/inthub_web/static/js/device.js +90 -0
- intent_history-7.6.7/apps/inthub_web/static/js/events-content.js +327 -0
- intent_history-7.6.7/apps/inthub_web/static/js/events-shell.js +282 -0
- intent_history-7.6.7/apps/inthub_web/static/js/flow-curves.js +208 -0
- intent_history-7.6.7/apps/inthub_web/static/js/flow-layout.js +255 -0
- intent_history-7.6.7/apps/inthub_web/static/js/flow-routes.js +179 -0
- intent_history-7.6.7/apps/inthub_web/static/js/flow-svg.js +183 -0
- intent_history-7.6.7/apps/inthub_web/static/js/flow-view.js +191 -0
- intent_history-7.6.7/apps/inthub_web/static/js/format.js +183 -0
- intent_history-7.6.7/apps/inthub_web/static/js/history.js +165 -0
- intent_history-7.6.7/apps/inthub_web/static/js/home.js +61 -0
- intent_history-7.6.7/apps/inthub_web/static/js/icons.js +72 -0
- intent_history-7.6.7/apps/inthub_web/static/js/init.js +51 -0
- intent_history-7.6.7/apps/inthub_web/static/js/intents.js +114 -0
- intent_history-7.6.7/apps/inthub_web/static/js/invite.js +77 -0
- intent_history-7.6.7/apps/inthub_web/static/js/order.txt +41 -0
- intent_history-7.6.7/apps/inthub_web/static/js/overview.js +219 -0
- intent_history-7.6.7/apps/inthub_web/static/js/project-data.js +161 -0
- intent_history-7.6.7/apps/inthub_web/static/js/project-loading.js +233 -0
- intent_history-7.6.7/apps/inthub_web/static/js/project-picker.js +55 -0
- intent_history-7.6.7/apps/inthub_web/static/js/project-settings.js +347 -0
- intent_history-7.6.7/apps/inthub_web/static/js/relations.js +127 -0
- intent_history-7.6.7/apps/inthub_web/static/js/render-parts.js +119 -0
- intent_history-7.6.7/apps/inthub_web/static/js/routes.js +99 -0
- intent_history-7.6.7/apps/inthub_web/static/js/search.js +202 -0
- intent_history-7.6.7/apps/inthub_web/static/js/select.js +94 -0
- intent_history-7.6.7/apps/inthub_web/static/js/settings-dialog.js +311 -0
- intent_history-7.6.7/apps/inthub_web/static/js/settings-layout.js +82 -0
- intent_history-7.6.7/apps/inthub_web/static/js/setup-guide.js +88 -0
- intent_history-7.6.7/apps/inthub_web/static/js/sheet.js +355 -0
- intent_history-7.6.7/apps/inthub_web/static/js/showcase.js +56 -0
- intent_history-7.6.7/apps/inthub_web/static/js/site-pages.js +101 -0
- intent_history-7.6.7/apps/inthub_web/static/js/state.js +120 -0
- intent_history-7.6.7/apps/inthub_web/static/js/team-page.js +310 -0
- intent_history-7.6.7/apps/inthub_web/static/js/teams.js +136 -0
- intent_history-7.6.7/apps/inthub_web/static/js/timeline.js +224 -0
- intent_history-7.6.7/apps/inthub_web/static/js/workspace.js +148 -0
- intent_history-7.6.7/apps/inthub_web/static/og.png +0 -0
- intent_history-7.6.7/apps/inthub_web/static/privacy.html +98 -0
- intent_history-7.6.7/apps/inthub_web/static/robots.txt +4 -0
- intent_history-7.6.7/apps/inthub_web/static/security.txt +5 -0
- intent_history-7.6.7/apps/inthub_web/static/tenon-mark.svg +1 -0
- intent_history-7.6.7/apps/inthub_web/static/theme.js +62 -0
- intent_history-7.6.7/deploy/inthub/backup.sh +168 -0
- intent_history-7.6.7/deploy/inthub/bootstrap-gitee-deployment.sh +65 -0
- intent_history-7.6.7/deploy/inthub/build-release.sh +270 -0
- intent_history-7.6.7/deploy/inthub/compose.yaml +90 -0
- intent_history-7.6.7/deploy/inthub/inthub.caddy +29 -0
- intent_history-7.6.7/deploy/inthub/inthub.env.example +20 -0
- intent_history-7.6.7/deploy/inthub/prepare-release-env.sh +79 -0
- intent_history-7.6.7/deploy/inthub/qualify-release.sh +158 -0
- intent_history-7.6.7/deploy/inthub/release-from-gitee.sh +144 -0
- intent_history-7.6.7/deploy/inthub/release.sh +68 -0
- intent_history-7.6.7/deploy/inthub/release_manifest.py +825 -0
- intent_history-7.6.7/deploy/inthub/remote-release.sh +606 -0
- intent_history-7.6.7/deploy/inthub/runtime-images.lock.json +12 -0
- intent_history-7.6.7/deploy/inthub/smoke.sh +91 -0
- intent_history-7.6.7/docs/CN/cli.md +414 -0
- intent_history-7.6.7/docs/CN/continuation-case.md +78 -0
- intent_history-7.6.7/docs/CN/dogfooding.md +54 -0
- intent_history-7.6.7/docs/CN/intent-flow.md +102 -0
- intent_history-7.6.7/docs/CN/inthub-collaboration.md +145 -0
- intent_history-7.6.7/docs/CN/semantic-git.md +101 -0
- intent_history-7.6.7/docs/CN/vision.md +85 -0
- intent_history-7.6.7/docs/EN/cli.md +414 -0
- intent_history-7.6.7/docs/EN/continuation-case.md +78 -0
- intent_history-7.6.7/docs/EN/dogfooding.md +54 -0
- intent_history-7.6.7/docs/EN/intent-flow.md +102 -0
- intent_history-7.6.7/docs/EN/inthub-collaboration.md +145 -0
- intent_history-7.6.7/docs/EN/semantic-git.md +101 -0
- intent_history-7.6.7/docs/EN/vision.md +85 -0
- intent_history-7.6.7/docs/assets/inthub-flow-dark.png +0 -0
- intent_history-7.6.7/docs/assets/inthub-flow-light.png +0 -0
- intent_history-7.6.7/docs/assets/inthub-flow-zh-dark.png +0 -0
- intent_history-7.6.7/docs/assets/inthub-flow-zh-light.png +0 -0
- intent_history-7.6.7/docs/assets/resume-demo-zh.gif +0 -0
- intent_history-7.6.7/docs/assets/resume-demo.gif +0 -0
- intent_history-7.6.7/docs/releases/v7.0.0.md +36 -0
- intent_history-7.6.7/docs/releases/v7.0.1.md +10 -0
- intent_history-7.6.7/docs/releases/v7.1.0.md +46 -0
- intent_history-7.6.7/docs/releases/v7.2.0.md +39 -0
- intent_history-7.6.7/docs/releases/v7.2.1.md +31 -0
- intent_history-7.6.7/docs/releases/v7.3.0.md +27 -0
- intent_history-7.6.7/docs/releases/v7.4.0.md +30 -0
- intent_history-7.6.7/docs/releases/v7.5.0.md +43 -0
- intent_history-7.6.7/docs/releases/v7.5.1.md +22 -0
- intent_history-7.6.7/docs/releases/v7.6.0.md +41 -0
- intent_history-7.6.7/docs/releases/v7.6.1.md +11 -0
- intent_history-7.6.7/docs/releases/v7.6.2.md +16 -0
- intent_history-7.6.7/docs/releases/v7.6.3.md +15 -0
- intent_history-7.6.7/docs/releases/v7.6.4.md +8 -0
- intent_history-7.6.7/docs/releases/v7.6.5.md +10 -0
- intent_history-7.6.7/docs/releases/v7.6.6.md +12 -0
- intent_history-7.6.7/docs/releases/v7.6.7.md +9 -0
- intent_history-7.6.7/intent_history.egg-info/PKG-INFO +190 -0
- intent_history-7.6.7/intent_history.egg-info/SOURCES.txt +286 -0
- intent_history-7.6.7/intent_history.egg-info/dependency_links.txt +1 -0
- intent_history-7.6.7/intent_history.egg-info/entry_points.txt +2 -0
- intent_history-7.6.7/intent_history.egg-info/requires.txt +21 -0
- intent_history-7.6.7/intent_history.egg-info/scm_file_list.json +282 -0
- intent_history-7.6.7/intent_history.egg-info/scm_version.json +8 -0
- intent_history-7.6.7/intent_history.egg-info/top_level.txt +2 -0
- intent_history-7.6.7/pyproject.toml +63 -0
- intent_history-7.6.7/references/claude-code-hooks.md +48 -0
- intent_history-7.6.7/references/codex-hooks.md +71 -0
- intent_history-7.6.7/references/execution.md +32 -0
- intent_history-7.6.7/references/onboarding.md +45 -0
- intent_history-7.6.7/references/pull.md +15 -0
- intent_history-7.6.7/references/sync.md +23 -0
- intent_history-7.6.7/scripts/changed_tests.py +63 -0
- intent_history-7.6.7/scripts/install.ps1 +90 -0
- intent_history-7.6.7/scripts/install.sh +91 -0
- intent_history-7.6.7/scripts/itt_argv.py +166 -0
- intent_history-7.6.7/setup.cfg +4 -0
- intent_history-7.6.7/src/intent_cli/__init__.py +14 -0
- intent_history-7.6.7/src/intent_cli/__main__.py +3 -0
- intent_history-7.6.7/src/intent_cli/cli.py +403 -0
- intent_history-7.6.7/src/intent_cli/commands/__init__.py +1 -0
- intent_history-7.6.7/src/intent_cli/commands/auth.py +181 -0
- intent_history-7.6.7/src/intent_cli/commands/common.py +60 -0
- intent_history-7.6.7/src/intent_cli/commands/core.py +207 -0
- intent_history-7.6.7/src/intent_cli/commands/hub.py +21 -0
- intent_history-7.6.7/src/intent_cli/commands/intents.py +373 -0
- intent_history-7.6.7/src/intent_cli/commands/maintenance.py +147 -0
- intent_history-7.6.7/src/intent_cli/commands/records.py +175 -0
- intent_history-7.6.7/src/intent_cli/commands/shared.py +296 -0
- intent_history-7.6.7/src/intent_cli/hub/__init__.py +1 -0
- intent_history-7.6.7/src/intent_cli/hub/changes.py +50 -0
- intent_history-7.6.7/src/intent_cli/hub/client.py +236 -0
- intent_history-7.6.7/src/intent_cli/hub/credentials.py +244 -0
- intent_history-7.6.7/src/intent_cli/hub/rebase.py +96 -0
- intent_history-7.6.7/src/intent_cli/hub/restore.py +331 -0
- intent_history-7.6.7/src/intent_cli/hub/runtime.py +68 -0
- intent_history-7.6.7/src/intent_cli/hub/snapshots.py +112 -0
- intent_history-7.6.7/src/intent_cli/hub/versions.py +39 -0
- intent_history-7.6.7/src/intent_cli/identity.py +63 -0
- intent_history-7.6.7/src/intent_cli/maintenance.py +241 -0
- intent_history-7.6.7/src/intent_cli/maintenance_hooks.py +361 -0
- intent_history-7.6.7/src/intent_cli/origin.py +57 -0
- intent_history-7.6.7/src/intent_cli/output.py +72 -0
- intent_history-7.6.7/src/intent_cli/relations.py +140 -0
- intent_history-7.6.7/src/intent_cli/render.py +373 -0
- intent_history-7.6.7/src/intent_cli/render_text.py +179 -0
- intent_history-7.6.7/src/intent_cli/store.py +439 -0
- intent_history-7.6.7/src/intent_cli/store_errors.py +69 -0
- intent_history-7.6.7/src/intent_cli/store_graph.py +143 -0
- intent_history-7.6.7/src/intent_cli/store_lock.py +104 -0
- intent_history-7.6.7/src/intent_cli/store_paths.py +69 -0
- intent_history-7.6.7/src/intent_cli/store_schema.py +246 -0
- intent_history-7.6.7/tests/cli_support.py +174 -0
- intent_history-7.6.7/tests/conftest.py +29 -0
- intent_history-7.6.7/tests/inthub_theme_logic.cjs +98 -0
- intent_history-7.6.7/tests/test_cli_global.py +141 -0
- intent_history-7.6.7/tests/test_cli_hub.py +207 -0
- intent_history-7.6.7/tests/test_cli_inspect.py +240 -0
- intent_history-7.6.7/tests/test_cli_objects.py +345 -0
- intent_history-7.6.7/tests/test_cli_storage.py +354 -0
- intent_history-7.6.7/tests/test_hub_client.py +359 -0
- intent_history-7.6.7/tests/test_hub_credentials.py +122 -0
- intent_history-7.6.7/tests/test_hub_runtime.py +83 -0
- intent_history-7.6.7/tests/test_identity.py +322 -0
- intent_history-7.6.7/tests/test_inthub_api_server.py +608 -0
- intent_history-7.6.7/tests/test_inthub_auth.py +79 -0
- intent_history-7.6.7/tests/test_inthub_db.py +101 -0
- intent_history-7.6.7/tests/test_inthub_deployment.py +513 -0
- intent_history-7.6.7/tests/test_inthub_device_login.py +149 -0
- intent_history-7.6.7/tests/test_inthub_hosted_limits.py +179 -0
- intent_history-7.6.7/tests/test_inthub_local.py +92 -0
- intent_history-7.6.7/tests/test_inthub_postgres.py +257 -0
- intent_history-7.6.7/tests/test_inthub_product_deletion.py +186 -0
- intent_history-7.6.7/tests/test_inthub_projects.py +215 -0
- intent_history-7.6.7/tests/test_inthub_queries.py +59 -0
- intent_history-7.6.7/tests/test_inthub_teams.py +508 -0
- intent_history-7.6.7/tests/test_inthub_tenon.py +189 -0
- intent_history-7.6.7/tests/test_inthub_web_ui.py +380 -0
- intent_history-7.6.7/tests/test_itt_argv.py +170 -0
- intent_history-7.6.7/tests/test_maintenance.py +778 -0
- intent_history-7.6.7/tests/test_origin.py +31 -0
- intent_history-7.6.7/tests/test_output.py +112 -0
- intent_history-7.6.7/tests/test_relations.py +255 -0
- intent_history-7.6.7/tests/test_shared_history.py +447 -0
- intent_history-7.6.7/tests/test_snapshot_restore.py +665 -0
- intent_history-7.6.7/tests/test_store_security.py +342 -0
- intent_history-7.6.7/tests/web/flow-and-paging.cjs +498 -0
- intent_history-7.6.7/tests/web/harness.cjs +314 -0
- intent_history-7.6.7/tests/web/header-menus.cjs +186 -0
- intent_history-7.6.7/tests/web/history.cjs +202 -0
- intent_history-7.6.7/tests/web/home-and-visitors.cjs +320 -0
- intent_history-7.6.7/tests/web/invites.cjs +84 -0
- intent_history-7.6.7/tests/web/redirect.cjs +50 -0
- intent_history-7.6.7/tests/web/run.cjs +25 -0
- intent_history-7.6.7/tests/web/settings.cjs +383 -0
- intent_history-7.6.7/tests/web/teams.cjs +268 -0
- intent_history-7.6.7/tests/web/view-controllers.cjs +223 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "intent",
|
|
3
|
+
"owner": {
|
|
4
|
+
"name": "Zeng Deyang"
|
|
5
|
+
},
|
|
6
|
+
"metadata": {
|
|
7
|
+
"description": "Intent semantic history for agent-driven development."
|
|
8
|
+
},
|
|
9
|
+
"plugins": [
|
|
10
|
+
{
|
|
11
|
+
"name": "intent-cli",
|
|
12
|
+
"description": "Instructions for quiet, continuous Intent semantic maintenance with the itt CLI. Ships the Skill only: no hooks, and no project is enabled by installing it.",
|
|
13
|
+
"source": "./",
|
|
14
|
+
"homepage": "https://github.com/dozybot001/Intent",
|
|
15
|
+
"repository": "https://github.com/dozybot001/Intent",
|
|
16
|
+
"license": "MIT",
|
|
17
|
+
"keywords": [
|
|
18
|
+
"intent",
|
|
19
|
+
"semantic-history",
|
|
20
|
+
"agent",
|
|
21
|
+
"continuation"
|
|
22
|
+
]
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Code of Conduct
|
|
2
|
+
|
|
3
|
+
## Our Pledge
|
|
4
|
+
|
|
5
|
+
We are committed to making participation in this project a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
|
|
6
|
+
|
|
7
|
+
## Our Standards
|
|
8
|
+
|
|
9
|
+
Examples of behavior that contributes to a positive environment:
|
|
10
|
+
|
|
11
|
+
- Using welcoming and inclusive language
|
|
12
|
+
- Being respectful of differing viewpoints and experiences
|
|
13
|
+
- Gracefully accepting constructive criticism
|
|
14
|
+
- Focusing on what is best for the community
|
|
15
|
+
|
|
16
|
+
Examples of unacceptable behavior:
|
|
17
|
+
|
|
18
|
+
- Trolling, insulting or derogatory comments, and personal or political attacks
|
|
19
|
+
- Public or private harassment
|
|
20
|
+
- Publishing others' private information without explicit permission
|
|
21
|
+
- Other conduct which could reasonably be considered inappropriate
|
|
22
|
+
|
|
23
|
+
## Enforcement
|
|
24
|
+
|
|
25
|
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting the maintainers. All complaints will be reviewed and investigated.
|
|
26
|
+
|
|
27
|
+
## Attribution
|
|
28
|
+
|
|
29
|
+
This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org), version 2.1.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Contributing to Intent
|
|
2
|
+
|
|
3
|
+
Thanks for your interest in contributing to Intent.
|
|
4
|
+
|
|
5
|
+
## Getting Started
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
git clone https://github.com/dozybot001/Intent.git
|
|
9
|
+
cd Intent
|
|
10
|
+
python3 -m venv .venv && source .venv/bin/activate
|
|
11
|
+
pip install -e ".[server,release]" # IntHub server dependencies + pytest
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Run tests before opening a PR (Node.js is needed for the web UI logic tests):
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
python -m pytest -q # the full suite
|
|
18
|
+
python scripts/changed_tests.py # only the tests your uncommitted changes affect
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Pass a commit, such as `python scripts/changed_tests.py HEAD~2`, to include what changed since then.
|
|
22
|
+
|
|
23
|
+
PostgreSQL integration tests are skipped unless `INTHUB_TEST_POSTGRES_URL` points at a disposable database, for example one started with `docker run --rm -e POSTGRES_PASSWORD=test -p 5432:5432 postgres`.
|
|
24
|
+
|
|
25
|
+
To work on the agent skill locally, install it from your checkout with `npx skills add ./ -g -a claude-code -a codex`.
|
|
26
|
+
|
|
27
|
+
## Development Workflow
|
|
28
|
+
|
|
29
|
+
This repo dogfoods Intent, and maintainers record milestones with `itt`.
|
|
30
|
+
You don't need to use Intent to contribute.
|
|
31
|
+
If you want to try it, `itt inspect` shows the current state.
|
|
32
|
+
`.intent/` is not in Git, so run `itt init` first in a fresh clone.
|
|
33
|
+
|
|
34
|
+
## Reporting Bugs
|
|
35
|
+
|
|
36
|
+
Open a [GitHub issue](https://github.com/dozybot001/Intent/issues/new?template=bug_report.md) with:
|
|
37
|
+
|
|
38
|
+
- What you expected to happen
|
|
39
|
+
- What actually happened
|
|
40
|
+
- The `itt` command and its JSON output
|
|
41
|
+
- Your Python version and OS
|
|
42
|
+
|
|
43
|
+
## Submitting Changes
|
|
44
|
+
|
|
45
|
+
1. Fork the repo and create a branch
|
|
46
|
+
2. Make your changes and add tests when behavior changes
|
|
47
|
+
3. Run `python -m pytest -q` and confirm all tests pass
|
|
48
|
+
4. Open a pull request with a clear description
|
|
49
|
+
|
|
50
|
+
## Project Structure
|
|
51
|
+
|
|
52
|
+
```text
|
|
53
|
+
src/intent_cli/ CLI (`itt`), standard library only
|
|
54
|
+
apps/inthub_api/ IntHub server: API, auth, history storage
|
|
55
|
+
apps/inthub_web/ IntHub web app (static, no build step)
|
|
56
|
+
apps/inthub_local/ `itt hub start` launcher for a local IntHub
|
|
57
|
+
SKILL.md, references/ Agent skill and its on-demand references
|
|
58
|
+
scripts/ Installers and the skill's argv adapter
|
|
59
|
+
deploy/inthub/ Production release tooling (maintainers)
|
|
60
|
+
docs/ User documentation (EN and CN)
|
|
61
|
+
tests/ Test suite (pytest + Node logic tests)
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Code Style
|
|
65
|
+
|
|
66
|
+
- Keep it simple. Don't over-engineer.
|
|
67
|
+
- No external dependencies for the CLI.
|
|
68
|
+
- Add tests for new commands and behavior changes.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Bug Report
|
|
3
|
+
about: Report a bug in the Intent CLI or IntHub
|
|
4
|
+
title: "[Bug] "
|
|
5
|
+
labels: bug
|
|
6
|
+
assignees: ''
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Describe the bug
|
|
10
|
+
|
|
11
|
+
Describe the bug clearly.
|
|
12
|
+
|
|
13
|
+
## To reproduce
|
|
14
|
+
|
|
15
|
+
List the steps or `itt` commands needed to reproduce it.
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
itt <command>
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## Expected behavior
|
|
22
|
+
|
|
23
|
+
What did you expect to happen?
|
|
24
|
+
|
|
25
|
+
## Actual behavior
|
|
26
|
+
|
|
27
|
+
What actually happened? Paste the JSON output if applicable.
|
|
28
|
+
|
|
29
|
+
```json
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Environment
|
|
34
|
+
|
|
35
|
+
- OS:
|
|
36
|
+
- Python version:
|
|
37
|
+
- Intent version (`itt version`):
|
|
38
|
+
- Agent (if applicable): Claude Code / Cursor / Codex / other
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Feature Request
|
|
3
|
+
about: Suggest an idea for Intent
|
|
4
|
+
title: "[Feature] "
|
|
5
|
+
labels: enhancement
|
|
6
|
+
assignees: ''
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Problem
|
|
10
|
+
|
|
11
|
+
What problem does this feature solve?
|
|
12
|
+
|
|
13
|
+
## Proposed solution
|
|
14
|
+
|
|
15
|
+
Describe the feature or change you would like to see.
|
|
16
|
+
|
|
17
|
+
## Affected area
|
|
18
|
+
|
|
19
|
+
- [ ] Intent CLI
|
|
20
|
+
- [ ] IntHub Local
|
|
21
|
+
- [ ] Agent skill
|
|
22
|
+
- [ ] Documentation
|
|
23
|
+
- [ ] Other
|
|
24
|
+
|
|
25
|
+
## Alternatives considered
|
|
26
|
+
|
|
27
|
+
Any alternative solutions or approaches you have considered.
|
|
28
|
+
|
|
29
|
+
## Additional context
|
|
30
|
+
|
|
31
|
+
Any extra context, examples, or references.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
Please fill this out in English.
|
|
2
|
+
|
|
3
|
+
## What does this PR do?
|
|
4
|
+
|
|
5
|
+
Brief description of the change.
|
|
6
|
+
|
|
7
|
+
## Type
|
|
8
|
+
|
|
9
|
+
- [ ] Bug fix
|
|
10
|
+
- [ ] New feature
|
|
11
|
+
- [ ] Refactoring
|
|
12
|
+
- [ ] Documentation
|
|
13
|
+
- [ ] Skill / tooling update
|
|
14
|
+
|
|
15
|
+
## Checklist
|
|
16
|
+
|
|
17
|
+
- [ ] `python -m pytest -q` passes when behavior changed
|
|
18
|
+
- [ ] Tested manually with `itt <relevant commands>` when applicable
|
|
19
|
+
- [ ] Documentation updated when behavior or UX changed
|
|
20
|
+
|
|
21
|
+
## Related
|
|
22
|
+
|
|
23
|
+
Link to issue, intent ID, or decision ID if applicable.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Security Policy
|
|
2
|
+
|
|
3
|
+
## Supported Versions
|
|
4
|
+
|
|
5
|
+
| Version | Supported |
|
|
6
|
+
| ------- | --------- |
|
|
7
|
+
| 7.x | :white_check_mark: |
|
|
8
|
+
| < 7.0 | :x: |
|
|
9
|
+
|
|
10
|
+
## Reporting a Vulnerability
|
|
11
|
+
|
|
12
|
+
If you discover a security vulnerability in Intent CLI or IntHub, report it privately through [GitHub's private vulnerability reporting](https://github.com/dozybot001/Intent/security/advisories/new) (repository **Security** tab → **Report a vulnerability**). Do not disclose user data, credentials, or an unpatched exploit in a public issue. Public, non-sensitive hardening suggestions may use the regular issue tracker directly.
|
|
13
|
+
|
|
14
|
+
We will acknowledge reports within 7 days and provide an update on the fix timeline.
|
|
15
|
+
|
|
16
|
+
## Scope
|
|
17
|
+
|
|
18
|
+
- **Intent CLI** (`itt`): runs locally, reads and writes `.intent/` JSON files, and communicates with IntHub via HTTP.
|
|
19
|
+
- **`.intent/` data**: may contain goals, implementation rationale, decisions, repository metadata, and an IntHub configuration. `itt init` adds `.intent/` to that clone's Git-local `.git/info/exclude` and reports a warning if it cannot; it does not edit the shared `.gitignore`. Users should still review the directory before sharing it or staging ignored files explicitly.
|
|
20
|
+
- **Hub credentials**: `itt auth login` stores an account access token through Git's configured credential helper, scoped to one IntHub endpoint; its protection is that helper's (for example the macOS Keychain, or plaintext with `credential.helper=store`). `--token` and `INTHUB_TOKEN` are never persisted and are only sent to the endpoint given on the command line, the user-level endpoint, or loopback, never to an endpoint named only by a shared `.intent/hub.json`. Remote IntHub URLs must use HTTPS. Tokens never enter `.intent/`.
|
|
21
|
+
- **IntHub Local**: binds to `127.0.0.1` by default and stores synchronized snapshots in an unencrypted SQLite database under `~/.inthub/inthub.db` unless configured otherwise.
|
|
22
|
+
|
|
23
|
+
## IntHub Local Trust Boundary
|
|
24
|
+
|
|
25
|
+
The bundled IntHub Local service is a single-user browser and read model for a trusted machine. It has no accounts: anything that can reach it can read and write its history. To keep other websites in your browser out, it answers only same-origin requests on loopback host names (no CORS headers, `Host` checked against 127.0.0.1/localhost to defeat DNS rebinding, JSON-only request bodies), and the server refuses to start unauthenticated on a non-loopback interface. It does not provide transport security or encryption at rest.
|
|
26
|
+
|
|
27
|
+
Do not bind IntHub Local to a LAN or public interface or publish it through a reverse proxy. For remote or multi-user use, deploy the authenticated profile instead.
|
|
28
|
+
|
|
29
|
+
The hosted service (https://inthub.tenon.asia) uses that authenticated profile: Tenon OIDC sign-in (PKCE, nonce, single-use state), host-only `Secure` `SameSite=Strict` session cookies, per-account history isolation, account access tokens that are stored as hashes and can be revoked, same-origin checks on browser writes, a strict Content-Security-Policy, and PostgreSQL bound to a private network behind TLS. Browser sessions are read-only for history; only account access tokens can push. Revoke a token from the account menu after any suspected disclosure.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Probes the hosted IntHub from outside its server. A failed run emails the
|
|
2
|
+
# repository owner, so nothing here needs an account or a secret.
|
|
3
|
+
name: monitor
|
|
4
|
+
|
|
5
|
+
on:
|
|
6
|
+
schedule:
|
|
7
|
+
- cron: "*/30 * * * *"
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
|
|
10
|
+
permissions:
|
|
11
|
+
contents: read
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
probe:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
timeout-minutes: 5
|
|
17
|
+
env:
|
|
18
|
+
CURL: curl --fail --silent --show-error --max-time 20 --retry 3 --retry-delay 30 --retry-all-errors
|
|
19
|
+
steps:
|
|
20
|
+
- name: Service is ready
|
|
21
|
+
run: $CURL https://inthub.tenon.asia/readyz
|
|
22
|
+
|
|
23
|
+
- name: Disk and backups are healthy
|
|
24
|
+
run: |
|
|
25
|
+
status="$($CURL https://inthub.tenon.asia/status.json)"
|
|
26
|
+
echo "$status"
|
|
27
|
+
oldest="$(date -u -d '2 hours ago' +%Y-%m-%dT%H:%M:%SZ)"
|
|
28
|
+
echo "$status" | jq -e --arg oldest "$oldest" \
|
|
29
|
+
'.disk == "ok" and .backup == "ok" and .offsite == "ok" and .checked_at >= $oldest'
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Publishes a release to PyPI through trusted publishing, so no token is stored.
|
|
2
|
+
# Runs after a GitHub release goes out, which the release procedure does last.
|
|
3
|
+
# To publish an existing tag by hand: gh workflow run publish.yml -f tag=vX.Y.Z
|
|
4
|
+
name: publish
|
|
5
|
+
|
|
6
|
+
on:
|
|
7
|
+
release:
|
|
8
|
+
types: [published]
|
|
9
|
+
workflow_dispatch:
|
|
10
|
+
inputs:
|
|
11
|
+
tag:
|
|
12
|
+
description: Tag to publish, such as v7.6.6
|
|
13
|
+
required: true
|
|
14
|
+
|
|
15
|
+
permissions:
|
|
16
|
+
contents: read
|
|
17
|
+
|
|
18
|
+
jobs:
|
|
19
|
+
pypi:
|
|
20
|
+
# Set the repository variable PYPI_ENABLED once PyPI trusts this workflow.
|
|
21
|
+
if: github.event_name == 'workflow_dispatch' || vars.PYPI_ENABLED == 'true'
|
|
22
|
+
runs-on: ubuntu-24.04
|
|
23
|
+
timeout-minutes: 10
|
|
24
|
+
environment: pypi
|
|
25
|
+
permissions:
|
|
26
|
+
id-token: write
|
|
27
|
+
steps:
|
|
28
|
+
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6.1.0
|
|
29
|
+
with:
|
|
30
|
+
ref: ${{ inputs.tag || github.event.release.tag_name }}
|
|
31
|
+
fetch-depth: 0
|
|
32
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
|
|
33
|
+
with:
|
|
34
|
+
python-version: "3.13"
|
|
35
|
+
- run: python -m pip install --quiet build
|
|
36
|
+
- run: python -m build
|
|
37
|
+
- uses: pypa/gh-action-pypi-publish@7245906fb61fa33a13554f9d5fb856fe61758086 # v1.14.3
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Test-only CI. Production releases never read from GitHub.
|
|
2
|
+
name: tests
|
|
3
|
+
|
|
4
|
+
on:
|
|
5
|
+
push:
|
|
6
|
+
branches: [main]
|
|
7
|
+
pull_request:
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
|
|
10
|
+
permissions:
|
|
11
|
+
contents: read
|
|
12
|
+
|
|
13
|
+
concurrency:
|
|
14
|
+
group: tests-${{ github.ref }}
|
|
15
|
+
cancel-in-progress: true
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
pytest:
|
|
19
|
+
name: pytest (Python ${{ matrix.python-version }})
|
|
20
|
+
runs-on: ubuntu-24.04
|
|
21
|
+
timeout-minutes: 15
|
|
22
|
+
strategy:
|
|
23
|
+
fail-fast: false
|
|
24
|
+
matrix:
|
|
25
|
+
# 3.9: requires-python floor; 3.13: production image; 3.14: release qualification.
|
|
26
|
+
python-version: ["3.9", "3.13", "3.14"]
|
|
27
|
+
services:
|
|
28
|
+
postgres:
|
|
29
|
+
# postgres:18.4-bookworm, the digest pinned in deploy/inthub/runtime-images.lock.json
|
|
30
|
+
image: postgres@sha256:16fa100a3a6e92c0556632870455e7f8c6f3df5cefddd67d6b95292732bd7ff0
|
|
31
|
+
env:
|
|
32
|
+
POSTGRES_DB: inthub_test
|
|
33
|
+
POSTGRES_USER: inthub_test
|
|
34
|
+
POSTGRES_PASSWORD: inthub_test_password
|
|
35
|
+
ports:
|
|
36
|
+
- 5432:5432
|
|
37
|
+
options: >-
|
|
38
|
+
--health-cmd "pg_isready -U inthub_test -d inthub_test"
|
|
39
|
+
--health-interval 5s
|
|
40
|
+
--health-timeout 5s
|
|
41
|
+
--health-retries 12
|
|
42
|
+
env:
|
|
43
|
+
INTHUB_TEST_POSTGRES_URL: postgresql://inthub_test:inthub_test_password@127.0.0.1:5432/inthub_test
|
|
44
|
+
PIP_DISABLE_PIP_VERSION_CHECK: "1"
|
|
45
|
+
steps:
|
|
46
|
+
- uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6.1.0
|
|
47
|
+
with:
|
|
48
|
+
fetch-depth: 0 # setuptools-scm derives the version from tags
|
|
49
|
+
persist-credentials: false
|
|
50
|
+
- uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
|
|
51
|
+
with:
|
|
52
|
+
python-version: ${{ matrix.python-version }}
|
|
53
|
+
- name: Install package with server and test extras
|
|
54
|
+
run: python -m pip install ".[server,release]"
|
|
55
|
+
- name: Run tests
|
|
56
|
+
run: python -m pytest -q -ra -n auto
|
|
57
|
+
- name: Smoke-test the installed CLI
|
|
58
|
+
run: itt version
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Historical materials not meant for the main repo
|
|
2
|
+
backup/
|
|
3
|
+
|
|
4
|
+
# Local Intent workspace metadata; do not commit to Git
|
|
5
|
+
.intent/
|
|
6
|
+
|
|
7
|
+
# Local IntHub runtime state; do not commit to Git
|
|
8
|
+
.inthub/
|
|
9
|
+
|
|
10
|
+
# Claude Code local settings and personal workspace overrides
|
|
11
|
+
.claude/
|
|
12
|
+
|
|
13
|
+
# Editor settings
|
|
14
|
+
.vscode/
|
|
15
|
+
.idea/
|
|
16
|
+
*.swp
|
|
17
|
+
*.swo
|
|
18
|
+
*~
|
|
19
|
+
|
|
20
|
+
# Logs and temp files
|
|
21
|
+
*.log
|
|
22
|
+
*.tmp
|
|
23
|
+
__pycache__/
|
|
24
|
+
.coverage
|
|
25
|
+
.pytest_cache/
|
|
26
|
+
.ruff_cache/
|
|
27
|
+
.mypy_cache/
|
|
28
|
+
htmlcov/
|
|
29
|
+
|
|
30
|
+
# Python environments and packaging
|
|
31
|
+
.venv/
|
|
32
|
+
venv/
|
|
33
|
+
dist/
|
|
34
|
+
build/
|
|
35
|
+
*.egg-info/
|
|
36
|
+
|
|
37
|
+
# Local secrets
|
|
38
|
+
.env
|
|
39
|
+
*.env
|
|
40
|
+
!deploy/inthub/inthub.env.example
|
|
41
|
+
|
|
42
|
+
# OS-generated files
|
|
43
|
+
.DS_Store
|
|
44
|
+
Thumbs.db
|
|
45
|
+
Desktop.ini
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Release images are Linux/amd64 only. Pin the exact platform manifest so the
|
|
2
|
+
# same Git commit cannot silently pick up a different Python or Debian base.
|
|
3
|
+
FROM python:3.13-slim@sha256:69e18bd8d831d88e0ef70239dc7771ab7c28bc296ae78ac75cde71e60aa4434f
|
|
4
|
+
|
|
5
|
+
ENV PYTHONUNBUFFERED=1 \
|
|
6
|
+
PYTHONDONTWRITEBYTECODE=1 \
|
|
7
|
+
PYTHONPATH=/app/src
|
|
8
|
+
|
|
9
|
+
WORKDIR /app
|
|
10
|
+
|
|
11
|
+
RUN groupadd --gid 10001 inthub \
|
|
12
|
+
&& useradd --uid 10001 --gid inthub --no-create-home --shell /usr/sbin/nologin inthub \
|
|
13
|
+
&& mkdir -p /data \
|
|
14
|
+
&& chown inthub:inthub /data
|
|
15
|
+
|
|
16
|
+
# The pinned binary wheel carries libpq, eliminating a floating apt snapshot
|
|
17
|
+
# from the release recipe while retaining an exact application dependency.
|
|
18
|
+
RUN python -m pip install --no-cache-dir --index-url https://mirrors.cloud.tencent.com/pypi/simple "psycopg[binary]==3.3.4" "Authlib==1.9.1" "httpx==0.28.1"
|
|
19
|
+
|
|
20
|
+
COPY --chown=inthub:inthub . /app
|
|
21
|
+
|
|
22
|
+
# Keep revision-specific metadata after the dependency layer so a new release
|
|
23
|
+
# can reuse the already downloaded PostgreSQL driver.
|
|
24
|
+
ARG INTHUB_VERSION=0.0.0
|
|
25
|
+
ARG INTHUB_REVISION=unknown
|
|
26
|
+
ARG INTHUB_SCHEMA_VERSION=4
|
|
27
|
+
ENV INTHUB_VERSION=${INTHUB_VERSION}
|
|
28
|
+
LABEL org.opencontainers.image.title="IntHub" \
|
|
29
|
+
org.opencontainers.image.source="https://gitee.com/dozybot/Intent" \
|
|
30
|
+
org.opencontainers.image.version="${INTHUB_VERSION}" \
|
|
31
|
+
org.opencontainers.image.revision="${INTHUB_REVISION}" \
|
|
32
|
+
io.inthub.database-schema-version="${INTHUB_SCHEMA_VERSION}"
|
|
33
|
+
|
|
34
|
+
USER 10001:10001
|
|
35
|
+
|
|
36
|
+
EXPOSE 8000
|
|
37
|
+
|
|
38
|
+
ENV INTHUB_HOST=0.0.0.0 \
|
|
39
|
+
INTHUB_PORT=8000 \
|
|
40
|
+
INTHUB_DB_PATH=/data/inthub.db \
|
|
41
|
+
INTHUB_SERVE_WEB=1
|
|
42
|
+
|
|
43
|
+
HEALTHCHECK --interval=15s --timeout=5s --start-period=20s --retries=4 \
|
|
44
|
+
CMD ["python", "-c", "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/readyz', timeout=3).read()"]
|
|
45
|
+
|
|
46
|
+
CMD ["python", "-m", "apps.inthub_api"]
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Zeng Deyang
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|