agentworkshop 0.5.3 → 0.5.5
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/.output/nitro.json +1 -1
- package/.output/public/_nuxt/builds/latest.json +1 -1
- package/.output/public/_nuxt/builds/meta/f2f649c5-fd3b-4507-a3a1-8b4a194de72d.json +1 -0
- package/.output/server/chunks/_/nitro.mjs +798 -679
- package/.output/server/chunks/_/nitro.mjs.map +1 -1
- package/.output/server/package.json +1 -1
- package/cli/commands/start.mjs +2 -2
- package/package.json +1 -1
- package/scripts/_dbg-prompts-resolve-test.ts +39 -0
- package/scripts/_dbg-retention-test.ts +25 -0
- package/scripts/dev-guard.mjs +33 -0
- package/scripts/start.mjs +13 -0
- package/server/data/daqs.json +75 -75
- package/server/data/dcw-lines.json +7 -0
- package/server/data/dcw-products.json +7 -0
- package/server/data/dcw-rollback.json +139 -1
- package/server/data/dcw-runs.json +27 -18
- package/server/data/dcw-writes.json +48 -0
- package/server/data/dcws.json +21 -0
- package/server/data/line-runs.json +22 -22
- package/server/plugins/backup.ts +21 -11
- package/server/plugins/dev-stability-guard.ts +13 -1
- package/server/plugins/retention.ts +57 -0
- package/server/services/workshop/daq/daq-controller.ts +4 -2
- package/server/services/workshop/db/retention.ts +50 -0
- package/server/services/workshop/dcw/dcw-controller.ts +4 -2
- package/server/services/workshop/prompts/loader.ts +63 -10
- package/shared/config/single-instance.mjs +86 -0
- package/.output/public/_nuxt/builds/meta/fb769eda-b1db-437b-adc7-ecf71eb3b30b.json +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nitro.mjs","sources":["../../../../node_modules/.pnpm/uncrypto@0.1.3/node_modules/uncrypto/dist/crypto.node.mjs","../../../../node_modules/.pnpm/destr@2.0.5/node_modules/destr/dist/index.mjs","../../../../node_modules/.pnpm/ufo@1.6.4/node_modules/ufo/dist/index.mjs","../../../../node_modules/.pnpm/cookie-es@1.2.3/node_modules/cookie-es/dist/index.mjs","../../../../node_modules/.pnpm/radix3@1.1.2/node_modules/radix3/dist/index.mjs","../../../../node_modules/.pnpm/defu@6.1.7/node_modules/defu/dist/defu.mjs","../../../../node_modules/.pnpm/iron-webcrypto@1.2.1/node_modules/iron-webcrypto/dist/index.js","../../../../node_modules/.pnpm/node-mock-http@1.0.5/node_modules/node-mock-http/dist/index.mjs","../../../../node_modules/.pnpm/h3@1.15.11/node_modules/h3/dist/index.mjs","../../../../node_modules/.pnpm/hookable@5.5.3/node_modules/hookable/dist/index.mjs","../../../../node_modules/.pnpm/node-fetch-native@1.6.7/node_modules/node-fetch-native/dist/native.mjs","../../../../node_modules/.pnpm/ofetch@1.5.1/node_modules/ofetch/dist/shared/ofetch.CWycOUEr.mjs","../../../../node_modules/.pnpm/ofetch@1.5.1/node_modules/ofetch/dist/node.mjs","../../../../node_modules/.pnpm/unstorage@1.17.5_db0@0.3.4_ioredis@5.11.1/node_modules/unstorage/dist/shared/unstorage.zVDD2mZo.mjs","../../../../node_modules/.pnpm/unstorage@1.17.5_db0@0.3.4_ioredis@5.11.1/node_modules/unstorage/dist/index.mjs","../../../../node_modules/.pnpm/unstorage@1.17.5_db0@0.3.4_ioredis@5.11.1/node_modules/unstorage/drivers/utils/index.mjs","../../../../node_modules/.pnpm/unstorage@1.17.5_db0@0.3.4_ioredis@5.11.1/node_modules/unstorage/drivers/utils/node-fs.mjs","../../../../node_modules/.pnpm/unstorage@1.17.5_db0@0.3.4_ioredis@5.11.1/node_modules/unstorage/drivers/fs-lite.mjs","../../../../node_modules/.pnpm/nitropack@2.13.4_oxc-parser_b1d7d58181e96cbc69b3295f5f958520/node_modules/nitropack/dist/runtime/internal/storage.mjs","../../../../node_modules/.pnpm/ohash@2.0.11/node_modules/ohash/dist/shared/ohash.D__AXeF1.mjs","../../../../node_modules/.pnpm/ohash@2.0.11/node_modules/ohash/dist/crypto/node/index.mjs","../../../../node_modules/.pnpm/nitropack@2.13.4_oxc-parser_b1d7d58181e96cbc69b3295f5f958520/node_modules/nitropack/dist/runtime/internal/hash.mjs","../../../../node_modules/.pnpm/nitropack@2.13.4_oxc-parser_b1d7d58181e96cbc69b3295f5f958520/node_modules/nitropack/dist/runtime/internal/cache.mjs","../../../../node_modules/.pnpm/klona@2.0.6/node_modules/klona/dist/index.mjs","../../../../node_modules/.pnpm/scule@1.3.0/node_modules/scule/dist/index.mjs","../../../../node_modules/.pnpm/nitropack@2.13.4_oxc-parser_b1d7d58181e96cbc69b3295f5f958520/node_modules/nitropack/dist/runtime/internal/utils.env.mjs","../../../../node_modules/.pnpm/nitropack@2.13.4_oxc-parser_b1d7d58181e96cbc69b3295f5f958520/node_modules/nitropack/dist/runtime/internal/config.mjs","../../../../node_modules/.pnpm/nitropack@2.13.4_oxc-parser_b1d7d58181e96cbc69b3295f5f958520/node_modules/nitropack/dist/runtime/internal/route-rules-utils.mjs","../../../../node_modules/.pnpm/nitropack@2.13.4_oxc-parser_b1d7d58181e96cbc69b3295f5f958520/node_modules/nitropack/dist/runtime/internal/route-rules.mjs","../../../../node_modules/.pnpm/nitropack@2.13.4_oxc-parser_b1d7d58181e96cbc69b3295f5f958520/node_modules/nitropack/dist/runtime/internal/utils.mjs","../../../../node_modules/.pnpm/@nuxt+nitro-server@4.5.2_2b2a73a5ea3a6c1cac65dd2aa61911d0/node_modules/@nuxt/nitro-server/dist/runtime/utils/error.mjs","../../../../node_modules/.pnpm/@nuxt+nitro-server@4.5.2_2b2a73a5ea3a6c1cac65dd2aa61911d0/node_modules/@nuxt/nitro-server/dist/runtime/handlers/error.mjs","../../../../node_modules/.pnpm/nitropack@2.13.4_oxc-parser_b1d7d58181e96cbc69b3295f5f958520/node_modules/nitropack/dist/runtime/internal/error/utils.mjs","../../../../node_modules/.pnpm/nitropack@2.13.4_oxc-parser_b1d7d58181e96cbc69b3295f5f958520/node_modules/nitropack/dist/runtime/internal/error/prod.mjs","../../../../node_modules/.pnpm/nuxt-auth-utils@0.5.30_magi_25cfea03c37d60c613297752f2919dae/node_modules/nuxt-auth-utils/dist/runtime/server/plugins/oauth.js","../../../../node_modules/.pnpm/hookable@6.1.1/node_modules/hookable/dist/index.mjs","../../../../node_modules/.pnpm/nitropack@2.13.4_oxc-parser_b1d7d58181e96cbc69b3295f5f958520/node_modules/nitropack/dist/runtime/internal/plugin.mjs","../../../../node_modules/.pnpm/nitropack@2.13.4_oxc-parser_b1d7d58181e96cbc69b3295f5f958520/node_modules/nitropack/dist/runtime/internal/renderer.mjs","../../../../node_modules/.pnpm/@nuxt+nitro-server@4.5.2_2b2a73a5ea3a6c1cac65dd2aa61911d0/node_modules/@nuxt/nitro-server/dist/runtime/utils/paths.mjs","../../../../server/utils/errors.ts","../../../../sdk/hooks.mjs","../../../../sdk/api.mjs","../../../../sdk/context.mjs","../../../../server/services/workshop/plugins/host.mjs","../../../../server/services/workshop/scene-events.ts","../../../../server/services/workshop/ops/ops.ts","../../../../server/utils/approval-gate.ts","../../../../server/utils/auth.ts","../../../../server/utils/config.ts","../../../../server/utils/response.ts","../../../../server/utils/validate.ts","../../../../node_modules/.pnpm/nuxt-auth-utils@0.5.30_magi_25cfea03c37d60c613297752f2919dae/node_modules/nuxt-auth-utils/dist/runtime/server/utils/session.js","../../../../node_modules/.pnpm/nuxt-auth-utils@0.5.30_magi_25cfea03c37d60c613297752f2919dae/node_modules/nuxt-auth-utils/dist/runtime/server/plugins/ws.js","../../../../server/plugins/aw-plugins.ts","../../../../shared/config/home.mjs","../../../../server/plugins/backup.ts","../../../../server/services/workshop/logger.ts","../../../../server/services/workshop/daq/infra.ts","../../../../server/services/workshop/daq/storage/sqlite.adapter.ts","../../../../server/services/workshop/daq/storage/timescale.adapter.ts","../../../../server/services/workshop/daq/storage/index.ts","../../../../server/services/workshop/daq/bus/inproc.adapter.ts","../../../../server/services/workshop/daq/bus/mqtt.adapter.ts","../../../../server/services/workshop/daq/bus/index.ts","../../../../shared/daq-protocol.ts","../../../../server/services/workshop/daq/drivers.ts","../../../../server/services/workshop/daq/daq-templates.ts","../../../../server/services/workshop/daq/daq-node.ts","../../../../server/services/workshop/daq/daq-runtime.ts","../../../../server/services/workshop/daq/daq-node.repo.ts","../../../../server/services/workshop/daq/host-ports.ts","../../../../server/services/workshop/daq/alarm-notify.ts","../../../../server/services/workshop/daq/daq-controller.ts","../../../../server/plugins/daq.ts","../../../../server/plugins/dev-stability-guard.ts","../../../../server/plugins/security.ts","../../../../shared/config/engine.mjs","../../../../server/services/system-config.ts","../../../../server/plugins/system-config.ts","../../../../server/services/workshop/db/database.ts","../../../../server/services/workshop/db/channel.repo.ts","../../../../server/services/workshop/db/agent.repo.ts","../../../../server/services/workshop/db/channel-agent.repo.ts","../../../../server/services/workshop/db/team.repo.ts","../../../../server/services/workshop/db/team-member.repo.ts","../../../../server/services/workshop/db/channel-template.repo.ts","../../../../server/services/workshop/db/task.repo.ts","../../../../server/services/workshop/db/message.repo.ts","../../../../server/services/workshop/db/subscription.repo.ts","../../../../server/services/workshop/db/memory.repo.ts","../../../../server/services/workshop/db/user.repo.ts","../../../../server/services/workshop/db/channel-event.repo.ts","../../../../server/services/workshop/db/ops.repo.ts","../../../../server/repositories/user.repository.ts","../../../../server/services/user.service.ts","../../../../server/services/workshop/runtime/mailbox.ts","../../../../server/api/workshop/ws.ts","../../../../server/services/workshop/runtime/execution-mode.ts","../../../../server/services/workshop/agents/mock-agent.ts","../../../../server/services/workshop/agents/harness-process.ts","../../../../server/services/workshop/agents/adapters/omp-rpc-client.ts","../../../../shared/terminal-protocol.ts","../../../../server/services/workshop/agents/harness-terminal.ts","../../../../server/services/workshop/prompts/loader.ts","../../../../server/services/workshop/agents/node-bindings.repo.ts","../../../../server/services/workshop/agents/tool-approvals.ts","../../../../shared/dcw-protocol.ts","../../../../server/services/workshop/dcw/drivers.ts","../../../../server/services/workshop/dcw/dcw-templates.ts","../../../../server/services/workshop/assets/device-twin.repo.ts","../../../../server/services/workshop/dcw/dcw-node.ts","../../../../server/services/workshop/dcw/dcw-node.repo.ts","../../../../server/services/workshop/dcw/dcw-runtime.ts","../../../../server/services/workshop/dcw/dcw-product.repo.ts","../../../../server/services/workshop/dcw/dcw-recipe.repo.ts","../../../../server/services/workshop/dcw/dcw-line.repo.ts","../../../../server/services/workshop/dcw/line-run.ts","../../../../server/services/workshop/dcw/recipe-rollback.repo.ts","../../../../server/services/workshop/dcw/recipe-rollback-manager.ts","../../../../server/services/workshop/dcw/dcw-controller.ts","../../../../server/services/workshop/agents/industrial-context.ts","../../../../server/services/workshop/agents/industrial-tools.ts","../../../../server/services/workshop/agents/omp-agent.ts","../../../../server/services/workshop/agents/claude-agent.ts","../../../../server/services/workshop/agents/factory.ts","../../../../server/services/workshop/types/task.ts","../../../../server/services/workshop/runtime/agent-runtime.ts","../../../../server/services/workshop/runtime/channel-runtime.ts","../../../../server/services/workshop/runtime/scheduler-loop.ts","../../../../server/services/workshop/runtime/task-engine.ts","../../../../server/services/workshop/runtime/memory.ts","../../../../server/services/workshop/runtime/embedding-provider.ts","../../../../server/services/workshop/runtime/manager.ts","../../../../server/plugins/workshop.ts","../../../../node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/shared/pathe.M-eThtNZ.mjs","../../../../node_modules/.pnpm/nitropack@2.13.4_oxc-parser_b1d7d58181e96cbc69b3295f5f958520/node_modules/nitropack/dist/runtime/internal/static.mjs","../../../../server/middleware/request-log.ts","../../../../node_modules/.pnpm/nuxt-auth-utils@0.5.30_magi_25cfea03c37d60c613297752f2919dae/node_modules/nuxt-auth-utils/dist/runtime/server/api/session.delete.js","../../../../node_modules/.pnpm/nuxt-auth-utils@0.5.30_magi_25cfea03c37d60c613297752f2919dae/node_modules/nuxt-auth-utils/dist/runtime/server/api/session.get.js","../../../../node_modules/.pnpm/nitropack@2.13.4_oxc-parser_b1d7d58181e96cbc69b3295f5f958520/node_modules/nitropack/dist/runtime/internal/app.mjs","../../../../node_modules/.pnpm/nitropack@2.13.4_oxc-parser_b1d7d58181e96cbc69b3295f5f958520/node_modules/nitropack/dist/runtime/internal/lib/http-graceful-shutdown.mjs","../../../../node_modules/.pnpm/nitropack@2.13.4_oxc-parser_b1d7d58181e96cbc69b3295f5f958520/node_modules/nitropack/dist/runtime/internal/shutdown.mjs"],"names":["decode","getQuery","parse","serialize","createRouter","f","h","c","i","l","g","createError","process","mergeHeaders","crypto","flatHooks","createTask","serialTaskCaller","parallelTaskCaller","callEachWith","createHooks","Hookable","s","callHooks","nodeFetch","fetch","Headers","Headers$1","AbortController","AbortController$1","normalizeKey","defineDriver","DRIVER_NAME","dirname","fsPromises","resolve","fsp","_inlineAppConfig","createRadixRouter","__publicField","log","watch","AEP_VERSION","randomUUID","_a","DB_PATH","rows","_b","_c","_d","reqNative","sleep","REGISTRY","bad","load","normalize","singleton","require","SCHEMA_SQL","COLS","randomPassword","randomBytes","hubGlobal","hub","criteria","worker","registry","frame","save","DATA_DIR","COOLDOWN_MS","_e","fresh","partsToText","pid","seen","modeInfo","rowToTask","TaskEngineImpl","callNodeRequestHandler","fetchNodeRequestHandler","gracefulShutdown"],"mappings":"","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,51,52,134,135,137,138,139,140,141]}
|
|
1
|
+
{"version":3,"file":"nitro.mjs","sources":["../../../../node_modules/.pnpm/uncrypto@0.1.3/node_modules/uncrypto/dist/crypto.node.mjs","../../../../node_modules/.pnpm/destr@2.0.5/node_modules/destr/dist/index.mjs","../../../../node_modules/.pnpm/ufo@1.6.4/node_modules/ufo/dist/index.mjs","../../../../node_modules/.pnpm/cookie-es@1.2.3/node_modules/cookie-es/dist/index.mjs","../../../../node_modules/.pnpm/radix3@1.1.2/node_modules/radix3/dist/index.mjs","../../../../node_modules/.pnpm/defu@6.1.7/node_modules/defu/dist/defu.mjs","../../../../node_modules/.pnpm/iron-webcrypto@1.2.1/node_modules/iron-webcrypto/dist/index.js","../../../../node_modules/.pnpm/node-mock-http@1.0.5/node_modules/node-mock-http/dist/index.mjs","../../../../node_modules/.pnpm/h3@1.15.11/node_modules/h3/dist/index.mjs","../../../../node_modules/.pnpm/hookable@5.5.3/node_modules/hookable/dist/index.mjs","../../../../node_modules/.pnpm/node-fetch-native@1.6.7/node_modules/node-fetch-native/dist/native.mjs","../../../../node_modules/.pnpm/ofetch@1.5.1/node_modules/ofetch/dist/shared/ofetch.CWycOUEr.mjs","../../../../node_modules/.pnpm/ofetch@1.5.1/node_modules/ofetch/dist/node.mjs","../../../../node_modules/.pnpm/unstorage@1.17.5_db0@0.3.4_ioredis@5.11.1/node_modules/unstorage/dist/shared/unstorage.zVDD2mZo.mjs","../../../../node_modules/.pnpm/unstorage@1.17.5_db0@0.3.4_ioredis@5.11.1/node_modules/unstorage/dist/index.mjs","../../../../node_modules/.pnpm/unstorage@1.17.5_db0@0.3.4_ioredis@5.11.1/node_modules/unstorage/drivers/utils/index.mjs","../../../../node_modules/.pnpm/unstorage@1.17.5_db0@0.3.4_ioredis@5.11.1/node_modules/unstorage/drivers/utils/node-fs.mjs","../../../../node_modules/.pnpm/unstorage@1.17.5_db0@0.3.4_ioredis@5.11.1/node_modules/unstorage/drivers/fs-lite.mjs","../../../../node_modules/.pnpm/nitropack@2.13.4_oxc-parser_b1d7d58181e96cbc69b3295f5f958520/node_modules/nitropack/dist/runtime/internal/storage.mjs","../../../../node_modules/.pnpm/ohash@2.0.11/node_modules/ohash/dist/shared/ohash.D__AXeF1.mjs","../../../../node_modules/.pnpm/ohash@2.0.11/node_modules/ohash/dist/crypto/node/index.mjs","../../../../node_modules/.pnpm/nitropack@2.13.4_oxc-parser_b1d7d58181e96cbc69b3295f5f958520/node_modules/nitropack/dist/runtime/internal/hash.mjs","../../../../node_modules/.pnpm/nitropack@2.13.4_oxc-parser_b1d7d58181e96cbc69b3295f5f958520/node_modules/nitropack/dist/runtime/internal/cache.mjs","../../../../node_modules/.pnpm/klona@2.0.6/node_modules/klona/dist/index.mjs","../../../../node_modules/.pnpm/scule@1.3.0/node_modules/scule/dist/index.mjs","../../../../node_modules/.pnpm/nitropack@2.13.4_oxc-parser_b1d7d58181e96cbc69b3295f5f958520/node_modules/nitropack/dist/runtime/internal/utils.env.mjs","../../../../node_modules/.pnpm/nitropack@2.13.4_oxc-parser_b1d7d58181e96cbc69b3295f5f958520/node_modules/nitropack/dist/runtime/internal/config.mjs","../../../../node_modules/.pnpm/nitropack@2.13.4_oxc-parser_b1d7d58181e96cbc69b3295f5f958520/node_modules/nitropack/dist/runtime/internal/route-rules-utils.mjs","../../../../node_modules/.pnpm/nitropack@2.13.4_oxc-parser_b1d7d58181e96cbc69b3295f5f958520/node_modules/nitropack/dist/runtime/internal/route-rules.mjs","../../../../node_modules/.pnpm/nitropack@2.13.4_oxc-parser_b1d7d58181e96cbc69b3295f5f958520/node_modules/nitropack/dist/runtime/internal/utils.mjs","../../../../node_modules/.pnpm/@nuxt+nitro-server@4.5.2_2b2a73a5ea3a6c1cac65dd2aa61911d0/node_modules/@nuxt/nitro-server/dist/runtime/utils/error.mjs","../../../../node_modules/.pnpm/@nuxt+nitro-server@4.5.2_2b2a73a5ea3a6c1cac65dd2aa61911d0/node_modules/@nuxt/nitro-server/dist/runtime/handlers/error.mjs","../../../../node_modules/.pnpm/nitropack@2.13.4_oxc-parser_b1d7d58181e96cbc69b3295f5f958520/node_modules/nitropack/dist/runtime/internal/error/utils.mjs","../../../../node_modules/.pnpm/nitropack@2.13.4_oxc-parser_b1d7d58181e96cbc69b3295f5f958520/node_modules/nitropack/dist/runtime/internal/error/prod.mjs","../../../../node_modules/.pnpm/nuxt-auth-utils@0.5.30_magi_25cfea03c37d60c613297752f2919dae/node_modules/nuxt-auth-utils/dist/runtime/server/plugins/oauth.js","../../../../node_modules/.pnpm/hookable@6.1.1/node_modules/hookable/dist/index.mjs","../../../../node_modules/.pnpm/nitropack@2.13.4_oxc-parser_b1d7d58181e96cbc69b3295f5f958520/node_modules/nitropack/dist/runtime/internal/plugin.mjs","../../../../node_modules/.pnpm/nitropack@2.13.4_oxc-parser_b1d7d58181e96cbc69b3295f5f958520/node_modules/nitropack/dist/runtime/internal/renderer.mjs","../../../../node_modules/.pnpm/@nuxt+nitro-server@4.5.2_2b2a73a5ea3a6c1cac65dd2aa61911d0/node_modules/@nuxt/nitro-server/dist/runtime/utils/paths.mjs","../../../../server/utils/errors.ts","../../../../sdk/hooks.mjs","../../../../sdk/api.mjs","../../../../sdk/context.mjs","../../../../server/services/workshop/plugins/host.mjs","../../../../server/services/workshop/scene-events.ts","../../../../server/services/workshop/ops/ops.ts","../../../../server/utils/approval-gate.ts","../../../../server/utils/auth.ts","../../../../server/utils/config.ts","../../../../server/utils/response.ts","../../../../server/utils/validate.ts","../../../../node_modules/.pnpm/nuxt-auth-utils@0.5.30_magi_25cfea03c37d60c613297752f2919dae/node_modules/nuxt-auth-utils/dist/runtime/server/utils/session.js","../../../../node_modules/.pnpm/nuxt-auth-utils@0.5.30_magi_25cfea03c37d60c613297752f2919dae/node_modules/nuxt-auth-utils/dist/runtime/server/plugins/ws.js","../../../../server/plugins/aw-plugins.ts","../../../../shared/config/home.mjs","../../../../server/plugins/backup.ts","../../../../server/services/workshop/logger.ts","../../../../server/services/workshop/daq/infra.ts","../../../../server/services/workshop/daq/storage/sqlite.adapter.ts","../../../../server/services/workshop/daq/storage/timescale.adapter.ts","../../../../server/services/workshop/daq/storage/index.ts","../../../../server/services/workshop/daq/bus/inproc.adapter.ts","../../../../server/services/workshop/daq/bus/mqtt.adapter.ts","../../../../server/services/workshop/daq/bus/index.ts","../../../../shared/daq-protocol.ts","../../../../server/services/workshop/daq/drivers.ts","../../../../server/services/workshop/daq/daq-templates.ts","../../../../server/services/workshop/daq/daq-node.ts","../../../../server/services/workshop/daq/daq-runtime.ts","../../../../server/services/workshop/daq/daq-node.repo.ts","../../../../server/services/workshop/daq/host-ports.ts","../../../../server/services/workshop/daq/alarm-notify.ts","../../../../server/services/workshop/daq/daq-controller.ts","../../../../server/plugins/daq.ts","../../../../server/plugins/dev-stability-guard.ts","../../../../server/services/workshop/db/retention.ts","../../../../server/plugins/retention.ts","../../../../server/plugins/security.ts","../../../../shared/config/engine.mjs","../../../../server/services/system-config.ts","../../../../server/plugins/system-config.ts","../../../../server/services/workshop/db/database.ts","../../../../server/services/workshop/db/channel.repo.ts","../../../../server/services/workshop/db/agent.repo.ts","../../../../server/services/workshop/db/channel-agent.repo.ts","../../../../server/services/workshop/db/team.repo.ts","../../../../server/services/workshop/db/team-member.repo.ts","../../../../server/services/workshop/db/channel-template.repo.ts","../../../../server/services/workshop/db/task.repo.ts","../../../../server/services/workshop/db/message.repo.ts","../../../../server/services/workshop/db/subscription.repo.ts","../../../../server/services/workshop/db/memory.repo.ts","../../../../server/services/workshop/db/user.repo.ts","../../../../server/services/workshop/db/channel-event.repo.ts","../../../../server/services/workshop/db/ops.repo.ts","../../../../server/repositories/user.repository.ts","../../../../server/services/user.service.ts","../../../../server/services/workshop/runtime/mailbox.ts","../../../../server/api/workshop/ws.ts","../../../../server/services/workshop/runtime/execution-mode.ts","../../../../server/services/workshop/agents/mock-agent.ts","../../../../server/services/workshop/agents/harness-process.ts","../../../../server/services/workshop/agents/adapters/omp-rpc-client.ts","../../../../shared/terminal-protocol.ts","../../../../server/services/workshop/agents/harness-terminal.ts","../../../../server/services/workshop/prompts/loader.ts","../../../../server/services/workshop/agents/node-bindings.repo.ts","../../../../server/services/workshop/agents/tool-approvals.ts","../../../../shared/dcw-protocol.ts","../../../../server/services/workshop/dcw/drivers.ts","../../../../server/services/workshop/dcw/dcw-templates.ts","../../../../server/services/workshop/assets/device-twin.repo.ts","../../../../server/services/workshop/dcw/dcw-node.ts","../../../../server/services/workshop/dcw/dcw-node.repo.ts","../../../../server/services/workshop/dcw/dcw-runtime.ts","../../../../server/services/workshop/dcw/dcw-product.repo.ts","../../../../server/services/workshop/dcw/dcw-recipe.repo.ts","../../../../server/services/workshop/dcw/dcw-line.repo.ts","../../../../server/services/workshop/dcw/line-run.ts","../../../../server/services/workshop/dcw/recipe-rollback.repo.ts","../../../../server/services/workshop/dcw/recipe-rollback-manager.ts","../../../../server/services/workshop/dcw/dcw-controller.ts","../../../../server/services/workshop/agents/industrial-context.ts","../../../../server/services/workshop/agents/industrial-tools.ts","../../../../server/services/workshop/agents/omp-agent.ts","../../../../server/services/workshop/agents/claude-agent.ts","../../../../server/services/workshop/agents/factory.ts","../../../../server/services/workshop/types/task.ts","../../../../server/services/workshop/runtime/agent-runtime.ts","../../../../server/services/workshop/runtime/channel-runtime.ts","../../../../server/services/workshop/runtime/scheduler-loop.ts","../../../../server/services/workshop/runtime/task-engine.ts","../../../../server/services/workshop/runtime/memory.ts","../../../../server/services/workshop/runtime/embedding-provider.ts","../../../../server/services/workshop/runtime/manager.ts","../../../../server/plugins/workshop.ts","../../../../node_modules/.pnpm/pathe@2.0.3/node_modules/pathe/dist/shared/pathe.M-eThtNZ.mjs","../../../../node_modules/.pnpm/nitropack@2.13.4_oxc-parser_b1d7d58181e96cbc69b3295f5f958520/node_modules/nitropack/dist/runtime/internal/static.mjs","../../../../server/middleware/request-log.ts","../../../../node_modules/.pnpm/nuxt-auth-utils@0.5.30_magi_25cfea03c37d60c613297752f2919dae/node_modules/nuxt-auth-utils/dist/runtime/server/api/session.delete.js","../../../../node_modules/.pnpm/nuxt-auth-utils@0.5.30_magi_25cfea03c37d60c613297752f2919dae/node_modules/nuxt-auth-utils/dist/runtime/server/api/session.get.js","../../../../node_modules/.pnpm/nitropack@2.13.4_oxc-parser_b1d7d58181e96cbc69b3295f5f958520/node_modules/nitropack/dist/runtime/internal/app.mjs","../../../../node_modules/.pnpm/nitropack@2.13.4_oxc-parser_b1d7d58181e96cbc69b3295f5f958520/node_modules/nitropack/dist/runtime/internal/lib/http-graceful-shutdown.mjs","../../../../node_modules/.pnpm/nitropack@2.13.4_oxc-parser_b1d7d58181e96cbc69b3295f5f958520/node_modules/nitropack/dist/runtime/internal/shutdown.mjs"],"names":["decode","getQuery","parse","serialize","createRouter","f","h","c","i","l","g","createError","process","mergeHeaders","crypto","flatHooks","createTask","serialTaskCaller","parallelTaskCaller","callEachWith","createHooks","Hookable","s","callHooks","nodeFetch","fetch","Headers","Headers$1","AbortController","AbortController$1","normalizeKey","defineDriver","DRIVER_NAME","dirname","fsPromises","resolve","fsp","_inlineAppConfig","createRadixRouter","__publicField","log","watch","AEP_VERSION","randomUUID","_a","DB_PATH","rows","_b","_c","_d","reqNative","sleep","REGISTRY","bad","load","normalize","singleton","require","SCHEMA_SQL","COLS","randomPassword","randomBytes","hubGlobal","hub","criteria","worker","registry","frame","save","DATA_DIR","COOLDOWN_MS","_e","fresh","partsToText","pid","seen","modeInfo","rowToTask","TaskEngineImpl","callNodeRequestHandler","fetchNodeRequestHandler","gracefulShutdown"],"mappings":"","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,51,52,136,137,139,140,141,142,143]}
|
package/cli/commands/start.mjs
CHANGED
|
@@ -74,11 +74,11 @@ export async function run(argv, ctx) {
|
|
|
74
74
|
|
|
75
75
|
// home 模式:把 AW_HOME/AW_MODE 传给应用与构建子进程
|
|
76
76
|
// (cwd=home 数据自然落盘;AW_MODE=home 防止包目录被误判为项目检出)
|
|
77
|
-
// prompts
|
|
77
|
+
// prompts 解析:项目 ./.AgentWorkShop/prompts 优先,否则 ~/.AgentWorkShop/prompts
|
|
78
|
+
// (服务端首启自动从包内资产播种,见 loader.ts)——不再把 AW_PROMPTS_DIR 钉死在包内
|
|
78
79
|
if (!isRepo) {
|
|
79
80
|
envExtra.AW_HOME = ctx.home
|
|
80
81
|
envExtra.AW_MODE = 'home'
|
|
81
|
-
envExtra.AW_PROMPTS_DIR = join(appRoot, '.AgentWorkShop', 'prompts')
|
|
82
82
|
}
|
|
83
83
|
// HOST 环境变量被 scripts/start.mjs 以最高优先读取(CLI 显式 --host 等效)
|
|
84
84
|
if (flags.host !== undefined) envExtra.HOST = host
|
package/package.json
CHANGED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* prompts 目录解析断言(夹具由 bash 预置,本脚本只做解析与输出)。
|
|
3
|
+
* 用法:npx tsx scripts/_dbg-prompts-resolve-test.ts <proj-with-prompts> <explicit-dir>
|
|
4
|
+
*/
|
|
5
|
+
import { existsSync, mkdtempSync, readFileSync, writeFileSync } from 'node:fs'
|
|
6
|
+
import { tmpdir } from 'node:os'
|
|
7
|
+
import { join } from 'node:path'
|
|
8
|
+
|
|
9
|
+
const proj = process.argv[2]!
|
|
10
|
+
const explicit = process.argv[3]!
|
|
11
|
+
const home = mkdtempSync(join(tmpdir(), 'aw-prompt-home-'))
|
|
12
|
+
process.env.AW_HOME = home
|
|
13
|
+
|
|
14
|
+
const { promptsDir } = await import('../server/services/workshop/prompts/loader')
|
|
15
|
+
|
|
16
|
+
// 场景1:空目录启动 → 兜底 ~/.AgentWorkShop/prompts 且自动播种
|
|
17
|
+
process.chdir(home)
|
|
18
|
+
const d1 = promptsDir()
|
|
19
|
+
console.log('场景1 兜底播种:', d1 === join(home, 'prompts') ? 'PASS' : 'FAIL', '| 初始文件:', existsSync(join(d1, 'host-tools.json')) && existsSync(join(d1, 'mode-goal.md')) ? 'PASS' : 'FAIL')
|
|
20
|
+
|
|
21
|
+
// 场景2:项目内 .AgentWorkShop/prompts 存在 → 项目内优先
|
|
22
|
+
process.chdir(proj)
|
|
23
|
+
const d2 = promptsDir()
|
|
24
|
+
console.log('场景2 项目内优先:', d2 === join(proj, '.AgentWorkShop', 'prompts') ? 'PASS' : 'FAIL')
|
|
25
|
+
|
|
26
|
+
// 场景3:home 已播种内容不被覆盖(用户改写后再次解析不回写)
|
|
27
|
+
process.chdir(home)
|
|
28
|
+
const goalFile = join(d1, 'mode-goal.md')
|
|
29
|
+
writeFileSync(goalFile, '# user-customized-for-test')
|
|
30
|
+
const d3 = promptsDir()
|
|
31
|
+
console.log('场景3 定制不被覆盖:', readFileSync(goalFile, 'utf8') === '# user-customized-for-test' && d3 === d1 ? 'PASS' : 'FAIL')
|
|
32
|
+
|
|
33
|
+
// 场景4:AW_PROMPTS_DIR 显式覆盖最高
|
|
34
|
+
process.env.AW_PROMPTS_DIR = explicit
|
|
35
|
+
process.chdir(proj)
|
|
36
|
+
const d4 = promptsDir()
|
|
37
|
+
console.log('场景4 显式覆盖:', join(d4, 'host-tools.json') === join(explicit, 'host-tools.json') ? 'PASS' : 'FAIL')
|
|
38
|
+
|
|
39
|
+
console.log('临时 home(可人工核对):', home)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 保留策略单元验证(hardening GROW-1 / AC-5):临时库种过期行 → sweep → 断言。
|
|
3
|
+
* 用法:npx tsx scripts/_dbg-retention-test.ts
|
|
4
|
+
*/
|
|
5
|
+
import { DatabaseSync } from 'node:sqlite'
|
|
6
|
+
import { runRetentionSweep } from '../server/services/workshop/db/retention'
|
|
7
|
+
|
|
8
|
+
const db = new DatabaseSync(':memory:')
|
|
9
|
+
db.exec('CREATE TABLE messages (id TEXT PRIMARY KEY, created_at TEXT NOT NULL)')
|
|
10
|
+
db.exec('CREATE TABLE audit_log (id INTEGER PRIMARY KEY AUTOINCREMENT, at TEXT NOT NULL)')
|
|
11
|
+
db.exec('CREATE TABLE approval_history (id TEXT PRIMARY KEY, created_at TEXT NOT NULL)')
|
|
12
|
+
const old = new Date(Date.now() - 40 * 86_400_000).toISOString()
|
|
13
|
+
const ancient = new Date(Date.now() - 120 * 86_400_000).toISOString()
|
|
14
|
+
const fresh = new Date(Date.now() - 1000).toISOString()
|
|
15
|
+
for (let i = 0; i < 12; i++) {
|
|
16
|
+
db.prepare('INSERT INTO messages VALUES (?,?)').run(`m${i}`, i < 8 ? old : fresh)
|
|
17
|
+
db.prepare('INSERT INTO audit_log (at) VALUES (?)').run(i < 6 ? ancient : fresh)
|
|
18
|
+
db.prepare('INSERT INTO approval_history VALUES (?,?)').run(`a${i}`, fresh)
|
|
19
|
+
}
|
|
20
|
+
console.log('SWEEP =', JSON.stringify(runRetentionSweep(db)))
|
|
21
|
+
const c = (t: string) => String((db.prepare(`SELECT COUNT(*) c FROM ${t}`).get() as { c: number }).c)
|
|
22
|
+
console.log(`剩量 messages=${c('messages')}(期望4) audit=${c('audit_log')}(期望6) approval=${c('approval_history')}(期望12)`)
|
|
23
|
+
|
|
24
|
+
process.env.AW_RETENTION_DISABLED = '1'
|
|
25
|
+
console.log('逃生门 =', JSON.stringify(runRetentionSweep(db)), '(期望 [])')
|
package/scripts/dev-guard.mjs
CHANGED
|
@@ -73,6 +73,39 @@ const effectivePort = cliPort ?? devPort
|
|
|
73
73
|
process.env.PORT = String(effectivePort)
|
|
74
74
|
console.log(`[config] worker PORT env -> ${effectivePort}`)
|
|
75
75
|
|
|
76
|
+
// --- 单实例互斥 + 端口占用显式报错(hardening ST-1/ST-4):不再静默换端口 ---
|
|
77
|
+
{
|
|
78
|
+
const { acquireLock, checkPort } = await import('../shared/config/single-instance.mjs')
|
|
79
|
+
const lock = acquireLock(resolve(root, '.AgentWorkShop'), { mode: 'dev', port: effectivePort })
|
|
80
|
+
if (!lock.ok) {
|
|
81
|
+
const h = lock.holder
|
|
82
|
+
console.error(`✖ 已有实例在运行(pid=${h.pid}${h.port ? `,端口=${h.port}` : ''},启动于 ${h.startedAt ?? '未知'},模式=${h.mode ?? '未知'})`)
|
|
83
|
+
console.error(` › dev/start 共享同一数据目录,禁止双开;如需并行请用 AW_HOME 隔离配置根`)
|
|
84
|
+
console.error(` › 如确认是残留锁文件,可删除 ${lock.lockPath} 后重试`)
|
|
85
|
+
process.exit(2)
|
|
86
|
+
}
|
|
87
|
+
const probeHost = devHost === '0.0.0.0' || devHost === '::' ? '127.0.0.1' : devHost
|
|
88
|
+
const occupied = await checkPort(probeHost, effectivePort)
|
|
89
|
+
if (occupied) {
|
|
90
|
+
let pidHint = ''
|
|
91
|
+
try {
|
|
92
|
+
const { execSync } = await import('node:child_process')
|
|
93
|
+
const isWin = process.platform === 'win32'
|
|
94
|
+
const out = execSync(
|
|
95
|
+
isWin ? `netstat -ano | findstr :${effectivePort}` : `lsof -ti :${effectivePort} 2>/dev/null | head -1`,
|
|
96
|
+
{ encoding: 'utf8', shell: true },
|
|
97
|
+
)
|
|
98
|
+
const m = isWin ? out.split('\n').find(l => l.includes('LISTENING')) : out.trim()
|
|
99
|
+
pidHint = isWin ? (m?.trim().split(/\s+/).pop() ?? '') : m
|
|
100
|
+
if (pidHint) pidHint = `(占用 pid=${pidHint})`
|
|
101
|
+
}
|
|
102
|
+
catch { /* 探测失败不阻断报错 */ }
|
|
103
|
+
console.error(`✖ 开发端口 ${effectivePort} 已被占用${pidHint}`)
|
|
104
|
+
console.error(` › 可显式指定其他端口: aw dev --port ${effectivePort + 1}`)
|
|
105
|
+
process.exit(2)
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
76
109
|
const inject = [...rest]
|
|
77
110
|
if (!hasPort) inject.push('--port', String(devPort))
|
|
78
111
|
if (!hasHost) inject.push('--host', devHost)
|
package/scripts/start.mjs
CHANGED
|
@@ -39,6 +39,8 @@ let argPort
|
|
|
39
39
|
}
|
|
40
40
|
|
|
41
41
|
const rm = resolveRunMode({ cwd: process.cwd(), packageRoot, env: process.env })
|
|
42
|
+
// 包根锚点(随进程环境传给应用):prompts 播种源 = <包根>/.AgentWorkShop/prompts
|
|
43
|
+
process.env.AW_PACKAGE_ROOT = packageRoot
|
|
42
44
|
const eff = loadEffective({
|
|
43
45
|
configPath: rm.configPath,
|
|
44
46
|
settingsPath: rm.settingsPath,
|
|
@@ -50,6 +52,17 @@ const host = eff.effective['server.host'] ?? '0.0.0.0'
|
|
|
50
52
|
const prodPort = eff.effective['server.prod.port'] ?? 3000
|
|
51
53
|
const portSource = eff.sources['server.prod.port']
|
|
52
54
|
|
|
55
|
+
// ---- 单实例互斥(hardening ST-1):同配置根双开直接退出码 2,防 SQLite 锁崩溃 ----
|
|
56
|
+
const { acquireLock } = await import('../shared/config/single-instance.mjs')
|
|
57
|
+
const lock = acquireLock(rm.configRoot, { mode: `prod:${rm.mode}`, port: argPort ? Number(argPort) : prodPort })
|
|
58
|
+
if (!lock.ok) {
|
|
59
|
+
const h = lock.holder
|
|
60
|
+
console.error(`✖ 已有实例在运行(pid=${h.pid}${h.port ? `,端口=${h.port}` : ''},启动于 ${h.startedAt ?? '未知'},模式=${h.mode ?? '未知'})`)
|
|
61
|
+
console.error(` › 配置根: ${rm.configRoot}`)
|
|
62
|
+
console.error(` › 如确认是残留锁文件,可删除 ${lock.lockPath} 后重试`)
|
|
63
|
+
process.exit(2)
|
|
64
|
+
}
|
|
65
|
+
|
|
53
66
|
process.env.HOST = process.env.HOST || process.env.NITRO_HOST || String(host)
|
|
54
67
|
process.env.PORT = process.env.PORT || process.env.NITRO_PORT || String(prodPort)
|
|
55
68
|
process.env.NITRO_HOST = process.env.HOST
|