@tekmidian/pai 1.0.5 → 1.0.7
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/.claude-plugin/plugin.json +1 -1
- package/dist/{aibroker-client-CQPGqLxL.mjs → aibroker-client-CXsyC7A8.mjs} +2 -2
- package/dist/aibroker-client-ChB7gSxV.mjs +3 -0
- package/dist/auto-route-CAlZ5p-h.mjs +11 -0
- package/dist/{auto-route-DUYr57rs.mjs → auto-route-PDOAYszN.mjs} +2 -2
- package/dist/budget-BXmsSBLI.mjs +15 -0
- package/dist/{caller-identity-Bim8JT-D.mjs → caller-identity-DPDSrZE2.mjs} +4 -4
- package/dist/{capacity-CsZMkVyg.mjs → capacity-CThSydrd.mjs} +82 -10
- package/dist/{chain-Dzz6xcKH.mjs → chain-BvdKqRiZ.mjs} +5 -5
- package/dist/cli/index.mjs +2175 -284
- package/dist/{cockpit-actions-BTA1njMO.mjs → cockpit-actions-BgdKB9G3.mjs} +26 -26
- package/dist/{cockpit-actions-BgsiNcUY.mjs → cockpit-actions-DNl0rKfW.mjs} +18 -18
- package/dist/cockpit-memory-CqLPjcWe.mjs +20 -0
- package/dist/config/defaults/config.yaml +24 -1
- package/dist/config/defaults/workers.yaml +2 -0
- package/dist/{config-h5qK3fst.mjs → config-C2dd2SXS.mjs} +2 -2
- package/dist/{config-CST2uq1v.mjs → config-DGV64YJa.mjs} +11 -3
- package/dist/{config-Dv3t7xnT.mjs → config-DHgPx3ER.mjs} +1 -1
- package/dist/{config-DYbyEe4-.mjs → config-SlZ-Z52i.mjs} +3 -2
- package/dist/{controls-OiVVbe-f.mjs → controls-ByrcupcA.mjs} +59 -66
- package/dist/daemon/index.mjs +40 -40
- package/dist/{daemon-C1dycZ3W.mjs → daemon-BjgJyJMP.mjs} +79 -31
- package/dist/daemon-iymy18Ie.mjs +46 -0
- package/dist/daemon-mcp/index.mjs +49 -38
- package/dist/detect-C8nFP-kR.mjs +10 -0
- package/dist/{detect-CHuxFrLy.mjs → detect-DLjeYwnt.mjs} +2 -2
- package/dist/{embed-pass-DtVF2fOV.mjs → embed-pass-DdTMn4DH.mjs} +5 -5
- package/dist/{embedding-gate-B98PK_wz.mjs → embedding-gate-BVQvUmox.mjs} +2 -2
- package/dist/{embedding-gate-CTAk8STe.mjs → embedding-gate-iq0oQEkF.mjs} +3 -3
- package/dist/{endreason-BqyyU7BH.mjs → endreason-BjPom527.mjs} +4 -4
- package/dist/{factory-BV0MQA3T.mjs → factory-CYwa0jYj.mjs} +6 -6
- package/dist/factory-DFwez99M.mjs +9 -0
- package/dist/{fallback-Bj2cyVk_.mjs → fallback-CQ8_CuVu.mjs} +9 -231
- package/dist/{health-kufVIf6i.mjs → health-Bb2U4PNK.mjs} +5 -5
- package/dist/{helpers-CvbYEKoD.mjs → helpers-Dj2nY56t.mjs} +2 -2
- package/dist/{helpers-WV8tdQHM.mjs → helpers-DyHKAwrW.mjs} +6 -6
- package/dist/hooks/block-sleep-poll.mjs +9 -0
- package/dist/hooks/capture-all-events.mjs +99 -3
- package/dist/hooks/capture-tool-output.mjs +99 -3
- package/dist/hooks/handoff-link.mjs +159 -0
- package/dist/hooks/load-project-context.mjs +10 -1
- package/dist/hooks/local-model-hint.mjs +9 -0
- package/dist/hooks/route-agents-to-worker.mjs +9 -0
- package/dist/hooks/security-validator.mjs +940 -92
- package/dist/hooks/supervision-banner.mjs +219 -48
- package/dist/hooks/worker-edit-repair.mjs +9 -0
- package/dist/hooks/worker-guard.mjs +97 -1
- package/dist/hooks/worker-note.mjs +108 -3
- package/dist/hooks/worker-pool-host.mjs +1670 -315
- package/dist/hooks/worker-proxy.mjs +9 -0
- package/dist/hooks/worker-status-line.mjs +251 -70
- package/dist/hooks/worker-supervision.mjs +9 -0
- package/dist/hooks/worker-tool-name-repair.mjs +9 -0
- package/dist/index.mjs +9 -9
- package/dist/{ipc-client-CnYEF31R.mjs → ipc-client-CmagIFLh.mjs} +2 -2
- package/dist/{ipc-client-DN7EvoVo.mjs → ipc-client-DmbSIBUK.mjs} +1 -1
- package/dist/kill-tree-BlPw1vaU.mjs +10 -0
- package/dist/{kill-tree-CcpsRLCZ.mjs → kill-tree-DTmiEb3T.mjs} +8 -8
- package/dist/{launch-DpQPZGsT.mjs → launch-CV6oPHI2.mjs} +3 -3
- package/dist/{launch-UPQBoW2q.mjs → launch-Dy8qQnSD.mjs} +3 -3
- package/dist/{indexer-backend-B2vtFl38.mjs → lessons-CdmqZD0G.mjs} +262 -43
- package/dist/{local-candidate-Cp_bw4kK.mjs → local-candidate-C2FGhf54.mjs} +3 -3
- package/dist/{local-instances-bdCNNSsL.mjs → local-instances-DhF4_sV2.mjs} +2 -2
- package/dist/{local-instances-B-c-CxzP.mjs → local-instances-GgXydQ2P.mjs} +4 -4
- package/dist/{local-tiers-BtdEEe5n.mjs → local-tiers-CqwGUcEn.mjs} +3 -3
- package/dist/{local-tiers-OBqAAfOg.mjs → local-tiers-X_dQfI4Q.mjs} +3 -3
- package/dist/{main-config-ops-BYsK3BxM.mjs → main-config-ops-C_fkINDv.mjs} +3 -3
- package/dist/{main-resolver-CAC3xfZM.mjs → main-resolver-CN_sfG1R.mjs} +18 -18
- package/dist/{migrate-DrA_OwlZ.mjs → migrate-C2z1YmWC.mjs} +2 -2
- package/dist/{model-inventory-BuTpi9a6.mjs → model-inventory-BYNrSTaY.mjs} +13 -13
- package/dist/{models-add-CJx2YAwh.mjs → models-add-Dc7VXmcu.mjs} +38 -38
- package/dist/operator-IrLbk8hy.mjs +7 -0
- package/dist/{operator-DrwWItVt.mjs → operator-lRGvYr3D.mjs} +2 -2
- package/dist/{pai-marker-DLKJ9Yr5.mjs → pai-marker-kA0iM7rP.mjs} +2 -2
- package/dist/{pane-audit-wv9UkyCe.mjs → pane-audit-DUuilP1V.mjs} +13 -23
- package/dist/{paths-DS5VQKoR.mjs → paths-BwfwHOvN.mjs} +4 -4
- package/dist/{paths-DBd78I7Z.mjs → paths-CKGYM0Lb.mjs} +3 -3
- package/dist/{planner-K0mFrCpL.mjs → planner-BDHVUkIM.mjs} +29 -29
- package/dist/{pool-BZ94nFuq.mjs → pool-CFeHGX7q.mjs} +2 -2
- package/dist/{pool-cli-BjYQDfx6.mjs → pool-cli-Bj2TeA-d.mjs} +6 -6
- package/dist/{pool-cli-B1eKySeN.mjs → pool-cli-DOLgPgOM.mjs} +5 -5
- package/dist/{postgres-CBHY5PIi.mjs → postgres-B1B80bcj.mjs} +3 -3
- package/dist/{postgres-C-T5OWer.mjs → postgres-BL5oBBgY.mjs} +3 -3
- package/dist/{project-setup-pIPHZaXf.mjs → project-setup-i5D0xkTn.mjs} +24 -25
- package/dist/{providers-Dzx5GAUI.mjs → providers-BC2Myo_O.mjs} +6 -6
- package/dist/providers-C-mnlH1b.mjs +16 -0
- package/dist/{query-feedback-DN52N9C5.mjs → query-feedback-BWl2HRwN.mjs} +2 -2
- package/dist/registrable-Ct0DKNKS.mjs +9 -0
- package/dist/{registrable-CXBBpUcz.mjs → registrable-D_4qXCnq.mjs} +4 -4
- package/dist/render-CbifCwTb.mjs +2350 -0
- package/dist/render-FB4Fv_fi.mjs +13 -0
- package/dist/root-80ESg6b7.mjs +36 -0
- package/dist/{root-bG48WVpW.mjs → root-B-ZYiEgi.mjs} +10 -10
- package/dist/route-table-DcBZCuco.mjs +15 -0
- package/dist/{router-CQSc3lk3.mjs → router-D2476pOp.mjs} +2 -2
- package/dist/{router-DwHJRgG9.mjs → router-ghujlEFb.mjs} +1 -1
- package/dist/{routing-BlD_tKjW.mjs → routing-CF0wlR-_.mjs} +15 -15
- package/dist/{routing-D27jxj9x.mjs → routing-CJ8ioPl2.mjs} +13 -13
- package/dist/{run-AZVwceiU.mjs → run-CAjfKBQV.mjs} +74 -31
- package/dist/{runtime-paths-WsO9sJFc.mjs → runtime-paths-twfV23YL.mjs} +2 -2
- package/dist/{scan-C3uotg_f.mjs → scan-ew8M6tTH.mjs} +7 -7
- package/dist/{scope-D8HK6vU7.mjs → scope-BRcaPw5D.mjs} +4 -4
- package/dist/session-BmQsXF_a.mjs +35 -0
- package/dist/{session-BAfypQb9.mjs → session-C1JnDXvP.mjs} +28 -28
- package/dist/session-scan-DWCUKhDM.mjs +9 -0
- package/dist/{session-scan-BmnjSReu.mjs → session-scan-DihMibI-.mjs} +6 -6
- package/dist/{session-usage-oycSdiD3.mjs → session-usage-BRIWFYPS.mjs} +3 -3
- package/dist/status-Bj4yVKj0.mjs +6 -0
- package/dist/{status-COtzewKV.mjs → status-DTMT5lyn.mjs} +9 -5
- package/dist/{tool-errors-DXJ70-sr.mjs → tool-errors-BOW2n882.mjs} +2 -2
- package/dist/{tool-errors-B2LnIqR0.mjs → tool-errors-jNJj3Gzm.mjs} +6 -6
- package/dist/{viewer-BgGRqXfD.mjs → viewer-4BU8w_gK.mjs} +16 -14
- package/dist/viewer-D3VEdqhC.mjs +22 -0
- package/dist/{wait-ChpHKJZV.mjs → wait-BindDA5w.mjs} +3 -3
- package/dist/{worker-config-DgdT0iTB.mjs → worker-config-CdPmb4_2.mjs} +54 -103
- package/dist/worker-config-CfV2dgSb.mjs +42 -0
- package/dist/{workers-config-BhZBrR-Q.mjs → workers-config-2VipVOYk.mjs} +2 -2
- package/dist/{worktree-BY--Rgmy.mjs → worktree-7ZS3RBf8.mjs} +175 -9
- package/dist/{zettelkasten-BHVx5zj-.mjs → zettelkasten-BH8AdNh8.mjs} +4 -4
- package/dist/{zettelkasten-LoH9RBiN.mjs → zettelkasten-FFhQFESJ.mjs} +2 -2
- package/docs/commands/README.md +32 -2
- package/docs/commands/audit.md +34 -3
- package/docs/commands/backup.md +1 -1
- package/docs/commands/build.md +4 -4
- package/docs/commands/cd.md +1 -1
- package/docs/commands/clear-names.md +1 -1
- package/docs/commands/cockpit.md +1 -1
- package/docs/commands/config.md +1 -1
- package/docs/commands/daemon.md +1 -1
- package/docs/commands/db.md +1 -1
- package/docs/commands/doc.md +1 -1
- package/docs/commands/end.md +1 -1
- package/docs/commands/find.md +1 -1
- package/docs/commands/git.md +110 -0
- package/docs/commands/handoff.md +70 -0
- package/docs/commands/harness.md +74 -0
- package/docs/commands/help.md +1 -1
- package/docs/commands/home.md +1 -1
- package/docs/commands/hooks-db.md +1 -1
- package/docs/commands/identity.md +1 -1
- package/docs/commands/install.md +1 -1
- package/docs/commands/issue.md +1 -1
- package/docs/commands/kg.md +1 -1
- package/docs/commands/launch.md +1 -1
- package/docs/commands/lessons.md +201 -0
- package/docs/commands/list.md +1 -1
- package/docs/commands/ls.md +1 -1
- package/docs/commands/mcp.md +1 -1
- package/docs/commands/memory.md +1 -1
- package/docs/commands/models.md +1 -1
- package/docs/commands/more.md +1 -1
- package/docs/commands/new.md +1 -1
- package/docs/commands/notes.md +1 -1
- package/docs/commands/notify.md +1 -1
- package/docs/commands/observation.md +1 -1
- package/docs/commands/obsidian.md +1 -1
- package/docs/commands/open.md +1 -1
- package/docs/commands/pane.md +1 -1
- package/docs/commands/pause.md +1 -1
- package/docs/commands/plan.md +1 -1
- package/docs/commands/project.md +1 -1
- package/docs/commands/projects.md +1 -1
- package/docs/commands/providers.md +1 -1
- package/docs/commands/queue.md +1 -1
- package/docs/commands/registry.md +1 -1
- package/docs/commands/reload.md +1 -1
- package/docs/commands/rename.md +1 -1
- package/docs/commands/restore.md +1 -1
- package/docs/commands/resume.md +1 -1
- package/docs/commands/router.md +1 -1
- package/docs/commands/rules.md +70 -0
- package/docs/commands/session.md +1 -1
- package/docs/commands/sessions.md +1 -1
- package/docs/commands/setup.md +1 -1
- package/docs/commands/setups.md +1 -1
- package/docs/commands/shell-init.md +1 -1
- package/docs/commands/skill.md +1 -1
- package/docs/commands/task.md +1 -1
- package/docs/commands/tasks.md +1 -1
- package/docs/commands/topic.md +1 -1
- package/docs/commands/update.md +1 -1
- package/docs/commands/worker.md +1 -1
- package/docs/commands/zettel.md +1 -1
- package/docs/concepts/panes.md +3 -2
- package/gemini-extension.json +1 -1
- package/package.json +2 -2
- package/pai-plugin.json +1 -1
- package/plugins/context-preservation/plugin.json +1 -1
- package/plugins/core/plugin.json +1 -1
- package/plugins/creative/plugin.json +1 -1
- package/plugins/observability/plugin.json +1 -1
- package/plugins/productivity/plugin.json +1 -1
- package/plugins/semantic-search/plugin.json +1 -1
- package/plugins/ui/plugin.json +1 -1
- package/plugins/zettelkasten/plugin.json +1 -1
- package/src/hooks/ts/lib/loop-guard.ts +3 -5
- package/src/hooks/ts/lib/rules/builtin/base64-decode-to-shell.rule.yaml +15 -0
- package/src/hooks/ts/lib/rules/builtin/chmod-world-writable.rule.yaml +13 -0
- package/src/hooks/ts/lib/rules/builtin/chmod-zero.rule.yaml +13 -0
- package/src/hooks/ts/lib/rules/builtin/credential-file-read.rule.yaml +13 -0
- package/src/hooks/ts/lib/rules/builtin/credential-read-then-network.rule.yaml +29 -0
- package/src/hooks/ts/lib/rules/builtin/crontab-persistence.rule.yaml +10 -0
- package/src/hooks/ts/lib/rules/builtin/curl-piped-to-shell.rule.yaml +22 -0
- package/src/hooks/ts/lib/rules/builtin/download-then-execute.rule.yaml +30 -0
- package/src/hooks/ts/lib/rules/builtin/find-root-delete.rule.yaml +14 -0
- package/src/hooks/ts/lib/rules/builtin/git-push-force.rule.yaml +24 -0
- package/src/hooks/ts/lib/rules/builtin/git-push-plus-refspec.rule.yaml +12 -0
- package/src/hooks/ts/lib/rules/builtin/git-reset-hard.rule.yaml +12 -0
- package/src/hooks/ts/lib/rules/builtin/injection-then-tool.rule.yaml +30 -0
- package/src/hooks/ts/lib/rules/builtin/instruction-override-disregard.rule.yaml +14 -0
- package/src/hooks/ts/lib/rules/builtin/instruction-override-ignore.rule.yaml +13 -0
- package/src/hooks/ts/lib/rules/builtin/launchagents-write-persistence.rule.yaml +12 -0
- package/src/hooks/ts/lib/rules/builtin/launchctl-load-persistence.rule.yaml +10 -0
- package/src/hooks/ts/lib/rules/builtin/reverse-shell-dev-tcp.rule.yaml +14 -0
- package/src/hooks/ts/lib/rules/builtin/reverse-shell-interactive-bash.rule.yaml +12 -0
- package/src/hooks/ts/lib/rules/builtin/rm-recursive-parent.rule.yaml +13 -0
- package/src/hooks/ts/lib/rules/builtin/rm-recursive-relative.rule.yaml +12 -0
- package/src/hooks/ts/lib/rules/builtin/rm-recursive-root.rule.yaml +27 -0
- package/src/hooks/ts/lib/rules/builtin/rm-trailing-tilde.rule.yaml +12 -0
- package/src/hooks/ts/lib/rules/builtin/sudoers-nopasswd.rule.yaml +15 -0
- package/src/hooks/ts/lib/rules/builtin.generated.ts +557 -0
- package/src/hooks/ts/lib/rules/eval.ts +76 -0
- package/src/hooks/ts/lib/rules/lint.ts +108 -0
- package/src/hooks/ts/lib/rules/load.ts +264 -0
- package/src/hooks/ts/lib/rules/types.ts +58 -0
- package/src/hooks/ts/pre-tool-use/security-validator.ts +35 -96
- package/src/hooks/ts/user-prompt/handoff-link.ts +34 -0
- package/dist/aibroker-client-BxzeEHPF.mjs +0 -3
- package/dist/auto-route-DWYK_0i0.mjs +0 -11
- package/dist/budget-DX-VIWGf.mjs +0 -15
- package/dist/cockpit-memory-DIrNs4xr.mjs +0 -20
- package/dist/daemon-ieo0lnpq.mjs +0 -46
- package/dist/detect-C0ZBXqDL.mjs +0 -10
- package/dist/factory-DeASMV7Z.mjs +0 -9
- package/dist/kill-tree-CXZ0WfVf.mjs +0 -10
- package/dist/operator-Bpxq_WB5.mjs +0 -7
- package/dist/providers-QJzpaNhX.mjs +0 -16
- package/dist/registrable-Drn8wIDO.mjs +0 -9
- package/dist/render-C4KR8qQ8.mjs +0 -13
- package/dist/render-Cz3BWIBO.mjs +0 -903
- package/dist/root-Bfb1zgwE.mjs +0 -36
- package/dist/route-table-ZVMNBsy7.mjs +0 -15
- package/dist/session-BcnhepLZ.mjs +0 -35
- package/dist/session-scan-CqUQdCac.mjs +0 -9
- package/dist/status-D_SWmOlH.mjs +0 -6
- package/dist/viewer-CbGN2Ri4.mjs +0 -22
- package/dist/worker-config-D1KVAMp4.mjs +0 -42
|
@@ -7351,7 +7351,7 @@ var require_public_api = __commonJS({
|
|
|
7351
7351
|
}
|
|
7352
7352
|
return doc;
|
|
7353
7353
|
}
|
|
7354
|
-
function
|
|
7354
|
+
function parse3(src, reviver, options) {
|
|
7355
7355
|
let _reviver = void 0;
|
|
7356
7356
|
if (typeof reviver === "function") {
|
|
7357
7357
|
_reviver = reviver;
|
|
@@ -7392,7 +7392,7 @@ var require_public_api = __commonJS({
|
|
|
7392
7392
|
return value.toString(options);
|
|
7393
7393
|
return new Document5.Document(value, _replacer, options).toString(options);
|
|
7394
7394
|
}
|
|
7395
|
-
exports.parse =
|
|
7395
|
+
exports.parse = parse3;
|
|
7396
7396
|
exports.parseAllDocuments = parseAllDocuments;
|
|
7397
7397
|
exports.parseDocument = parseDocument5;
|
|
7398
7398
|
exports.stringify = stringify;
|
|
@@ -7777,27 +7777,6 @@ var init_scope = __esm({
|
|
|
7777
7777
|
}
|
|
7778
7778
|
});
|
|
7779
7779
|
|
|
7780
|
-
// src/workers/chatui.ts
|
|
7781
|
-
var init_chatui = __esm({
|
|
7782
|
-
"src/workers/chatui.ts"() {
|
|
7783
|
-
"use strict";
|
|
7784
|
-
}
|
|
7785
|
-
});
|
|
7786
|
-
|
|
7787
|
-
// src/workers/deadline.ts
|
|
7788
|
-
var init_deadline = __esm({
|
|
7789
|
-
"src/workers/deadline.ts"() {
|
|
7790
|
-
"use strict";
|
|
7791
|
-
}
|
|
7792
|
-
});
|
|
7793
|
-
|
|
7794
|
-
// src/workers/active-time.ts
|
|
7795
|
-
var init_active_time = __esm({
|
|
7796
|
-
"src/workers/active-time.ts"() {
|
|
7797
|
-
"use strict";
|
|
7798
|
-
}
|
|
7799
|
-
});
|
|
7800
|
-
|
|
7801
7780
|
// src/workers/stagger.ts
|
|
7802
7781
|
var init_stagger = __esm({
|
|
7803
7782
|
"src/workers/stagger.ts"() {
|
|
@@ -7806,6 +7785,14 @@ var init_stagger = __esm({
|
|
|
7806
7785
|
}
|
|
7807
7786
|
});
|
|
7808
7787
|
|
|
7788
|
+
// src/workers/waiting.ts
|
|
7789
|
+
var init_waiting = __esm({
|
|
7790
|
+
"src/workers/waiting.ts"() {
|
|
7791
|
+
"use strict";
|
|
7792
|
+
init_args();
|
|
7793
|
+
}
|
|
7794
|
+
});
|
|
7795
|
+
|
|
7809
7796
|
// src/workers/capacity.ts
|
|
7810
7797
|
var DEFAULT_CAPACITY;
|
|
7811
7798
|
var init_capacity = __esm({
|
|
@@ -7813,23 +7800,37 @@ var init_capacity = __esm({
|
|
|
7813
7800
|
"use strict";
|
|
7814
7801
|
init_stagger();
|
|
7815
7802
|
init_config3();
|
|
7803
|
+
init_waiting();
|
|
7816
7804
|
init_status();
|
|
7817
7805
|
DEFAULT_CAPACITY = { enabled: true, localDefaultCap: 1, uncappedQueueCap: 3, maxTotalWaitMs: 2 * 36e5, heartbeatMs: 6e4, agingMs: 15 * 6e4 };
|
|
7818
7806
|
}
|
|
7819
7807
|
});
|
|
7820
7808
|
|
|
7821
|
-
// src/workers/
|
|
7822
|
-
var
|
|
7823
|
-
"src/workers/
|
|
7809
|
+
// src/workers/chatui.ts
|
|
7810
|
+
var init_chatui = __esm({
|
|
7811
|
+
"src/workers/chatui.ts"() {
|
|
7824
7812
|
"use strict";
|
|
7825
7813
|
}
|
|
7826
7814
|
});
|
|
7827
7815
|
|
|
7828
|
-
// src/workers/
|
|
7829
|
-
var
|
|
7830
|
-
"src/workers/
|
|
7816
|
+
// src/workers/deadline.ts
|
|
7817
|
+
var init_deadline = __esm({
|
|
7818
|
+
"src/workers/deadline.ts"() {
|
|
7819
|
+
"use strict";
|
|
7820
|
+
}
|
|
7821
|
+
});
|
|
7822
|
+
|
|
7823
|
+
// src/workers/active-time.ts
|
|
7824
|
+
var init_active_time = __esm({
|
|
7825
|
+
"src/workers/active-time.ts"() {
|
|
7826
|
+
"use strict";
|
|
7827
|
+
}
|
|
7828
|
+
});
|
|
7829
|
+
|
|
7830
|
+
// src/workers/denials.ts
|
|
7831
|
+
var init_denials = __esm({
|
|
7832
|
+
"src/workers/denials.ts"() {
|
|
7831
7833
|
"use strict";
|
|
7832
|
-
init_args();
|
|
7833
7834
|
}
|
|
7834
7835
|
});
|
|
7835
7836
|
|
|
@@ -8072,6 +8073,7 @@ var init_worktree = __esm({
|
|
|
8072
8073
|
init_paths();
|
|
8073
8074
|
init_pending();
|
|
8074
8075
|
init_pool();
|
|
8076
|
+
init_config2();
|
|
8075
8077
|
}
|
|
8076
8078
|
});
|
|
8077
8079
|
|
|
@@ -8095,6 +8097,189 @@ var init_endreason = __esm({
|
|
|
8095
8097
|
}
|
|
8096
8098
|
});
|
|
8097
8099
|
|
|
8100
|
+
// src/workers/ps-table.ts
|
|
8101
|
+
import { execFileSync as execFileSync2 } from "node:child_process";
|
|
8102
|
+
function truncateLines(text, max = PS_MAX_LINE) {
|
|
8103
|
+
return text.split("\n").map((l) => l.length > max ? l.slice(0, max) : l).join("\n");
|
|
8104
|
+
}
|
|
8105
|
+
function psTable(format, run = realRunner, maxLine = PS_MAX_LINE) {
|
|
8106
|
+
return truncateLines(run(["-axo", format]), maxLine);
|
|
8107
|
+
}
|
|
8108
|
+
var PS_MAX_BUFFER, PS_MAX_LINE, realRunner;
|
|
8109
|
+
var init_ps_table = __esm({
|
|
8110
|
+
"src/workers/ps-table.ts"() {
|
|
8111
|
+
"use strict";
|
|
8112
|
+
PS_MAX_BUFFER = 64 * 1024 * 1024;
|
|
8113
|
+
PS_MAX_LINE = 1024;
|
|
8114
|
+
realRunner = (args) => execFileSync2("ps", args, { encoding: "utf8", env: { ...process.env, LC_ALL: "C" }, maxBuffer: PS_MAX_BUFFER, timeout: 15e3 });
|
|
8115
|
+
}
|
|
8116
|
+
});
|
|
8117
|
+
|
|
8118
|
+
// src/workers/hang-probe.ts
|
|
8119
|
+
var init_hang_probe = __esm({
|
|
8120
|
+
"src/workers/hang-probe.ts"() {
|
|
8121
|
+
"use strict";
|
|
8122
|
+
init_ps_table();
|
|
8123
|
+
}
|
|
8124
|
+
});
|
|
8125
|
+
|
|
8126
|
+
// src/utils/redact.ts
|
|
8127
|
+
var REDACTED, REDACTED_RE, KEY_WORDS, PROSE, VAL, REDACT_RULES, LINE_RULES, LONG_RUN, LONG_RUN_MAX_LINE, KEY_LINE;
|
|
8128
|
+
var init_redact = __esm({
|
|
8129
|
+
"src/utils/redact.ts"() {
|
|
8130
|
+
"use strict";
|
|
8131
|
+
REDACTED = "[REDACTED]";
|
|
8132
|
+
REDACTED_RE = String.raw`\[REDACTED\]`;
|
|
8133
|
+
KEY_WORDS = "password|passwd|secret|token|api[_-]?key|credential|auth(?:orization)?|bearer";
|
|
8134
|
+
PROSE = "is|are|was|were|be|to|of|in|on|for|and|or|the|a|an|that|this|it|not|out|here|there|so|as|at|by|with|if|when|which";
|
|
8135
|
+
VAL = String.raw`(?:"[^"]*"|'[^']*'|[^\s'"]+)`;
|
|
8136
|
+
REDACT_RULES = [
|
|
8137
|
+
{
|
|
8138
|
+
// `Authorization: Bearer xxx` / `Authorization: Basic xxx` — keep the scheme
|
|
8139
|
+
id: "authorization",
|
|
8140
|
+
re: /(Authorization\s*:\s*)(Bearer|Basic)\s+([^\s'"]+)/gi,
|
|
8141
|
+
replace: (_m, head, scheme) => `${head}${scheme} ${REDACTED}`
|
|
8142
|
+
},
|
|
8143
|
+
{
|
|
8144
|
+
// `Cookie: a=b; c=d` — keep the cookie names, redact every value
|
|
8145
|
+
id: "cookie",
|
|
8146
|
+
re: /((?:Set-)?Cookie\s*:\s*)([^\n]+)/gi,
|
|
8147
|
+
replace: (_m, head, rest) => `${head}${rest.replace(/([^=;\s'"]+=)[^;'"]*/g, `$1${REDACTED}`)}`
|
|
8148
|
+
},
|
|
8149
|
+
{
|
|
8150
|
+
// `key=value`, `key: value`, `"key": "value"` — key carries a secret-ish word;
|
|
8151
|
+
// the word must be a whole key segment, so `monkeys=` stays untouched.
|
|
8152
|
+
// The separator may start with the key's closing quote (JSON); it is kept.
|
|
8153
|
+
id: "key-value",
|
|
8154
|
+
re: new RegExp(String.raw`(?<![A-Za-z0-9])((?:[A-Za-z0-9]+[_-])?(?:${KEY_WORDS})(?![A-Za-z0-9])[A-Za-z0-9_-]*)(["']?\s*[:=]\s*)(?!(?:Bearer|Basic) ${REDACTED_RE})(?!(?:${PROSE})\b)(${VAL})`, "gi"),
|
|
8155
|
+
replace: (m, key, sep, val) => {
|
|
8156
|
+
if (/[_-](?:count|length|len|size|limit|max|min|budget)$/i.test(key) && /^\d+$/.test(val)) return m;
|
|
8157
|
+
const q = sep[0] === '"' || sep[0] === "'" ? val[0] : "";
|
|
8158
|
+
return q && (q === '"' || q === "'") ? `${key}${sep}${q}${REDACTED}${q}` : `${key}${sep}${REDACTED}`;
|
|
8159
|
+
}
|
|
8160
|
+
},
|
|
8161
|
+
{
|
|
8162
|
+
// npmrc `//registry/:_authToken=xxx`
|
|
8163
|
+
id: "npm-auth-token",
|
|
8164
|
+
re: new RegExp(String.raw`(_authToken\s*=\s*)(${VAL})`, "g"),
|
|
8165
|
+
replace: (_m, head) => `${head}${REDACTED}`
|
|
8166
|
+
},
|
|
8167
|
+
{
|
|
8168
|
+
// `curl -u user:pass` / `--user user:pass` — keep the user
|
|
8169
|
+
id: "curl-user",
|
|
8170
|
+
re: /(\bcurl\b[^\n]{0,500}?\s(?:-u|--user)[\s=]+['"]?[^\s:'"]+:)([^\s'"]+)/g,
|
|
8171
|
+
replace: (_m, head) => `${head}${REDACTED}`
|
|
8172
|
+
},
|
|
8173
|
+
{
|
|
8174
|
+
// `mysql -phunter2` / `mysqldump -p'hunter2'` — attached password only
|
|
8175
|
+
id: "mysql-p",
|
|
8176
|
+
re: /(\bmysql(?:dump)?\b[^\n]{0,300}?\s-p)('[^']*'|"[^"]*"|[^\s'"-][^\s'"]*)/g,
|
|
8177
|
+
replace: (_m, head) => `${head}${REDACTED}`
|
|
8178
|
+
},
|
|
8179
|
+
{
|
|
8180
|
+
// `export FOO_TOKEN=...` / `FOO_KEY=...` — SCREAMING_SNAKE env style
|
|
8181
|
+
id: "env-style",
|
|
8182
|
+
re: new RegExp(String.raw`(?<![A-Za-z0-9])((?:export\s+)?[A-Z][A-Z0-9]*_(?:KEY|SECRET|TOKEN|PASS\w*|CRED\w*|AUTH\w*)\s*=\s*)(${VAL})`, "g"),
|
|
8183
|
+
replace: (_m, head) => `${head}${REDACTED}`
|
|
8184
|
+
},
|
|
8185
|
+
{
|
|
8186
|
+
// long CLI flags only: `--password X`, `--token X`, `--api-key X`, `--secret X`, `--passwd X`
|
|
8187
|
+
id: "cli-flag",
|
|
8188
|
+
re: new RegExp(String.raw`(--(?:password|token|api-key|secret|passwd)(?:\s*=\s*|\s+))(${VAL})`, "gi"),
|
|
8189
|
+
replace: (_m, head) => `${head}${REDACTED}`
|
|
8190
|
+
},
|
|
8191
|
+
{
|
|
8192
|
+
// `scheme://user:pass@host` — redact the password, keep user and host
|
|
8193
|
+
id: "url-credentials",
|
|
8194
|
+
re: /((?<![a-z0-9+.-])[a-z][a-z0-9+.-]*:\/\/[^\s/@:]+:)([^\s/@]+)(@)/gi,
|
|
8195
|
+
replace: (_m, head, _pass, at) => `${head}${REDACTED}${at}`
|
|
8196
|
+
},
|
|
8197
|
+
{
|
|
8198
|
+
// provider token prefixes: sk-ant-, sk-, ghp_/gho_/ghu_/ghs_/ghr_, github_pat_,
|
|
8199
|
+
// glpat-, xoxb-/xoxp-/xoxa-, AKIA/ASIA + 16 chars, AIza + 35 chars, JWT (eyJ… three segments)
|
|
8200
|
+
id: "token-prefix",
|
|
8201
|
+
re: /\b(?:sk-ant-[A-Za-z0-9_-]{20,}|sk-[A-Za-z0-9_-]{20,}|gh[pousr]_[A-Za-z0-9]{30,}|github_pat_[A-Za-z0-9_]{22,}|glpat-[A-Za-z0-9_-]{20,}|xox[bap]-[A-Za-z0-9-]{10,}|(?:AKIA|ASIA|AGPA|AIDA|AROA)[A-Z0-9]{16}|[sr]k_(?:live|test)_[A-Za-z0-9]{20,}|npm_[A-Za-z0-9]{36}|hf_[A-Za-z0-9]{30,}|AIza[A-Za-z0-9_-]{35}(?![A-Za-z0-9_-])|eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+)(?![A-Za-z0-9_-])/g,
|
|
8202
|
+
replace: REDACTED
|
|
8203
|
+
},
|
|
8204
|
+
{
|
|
8205
|
+
// 40+ char opaque base64/hex run, only on a line that also has a secret-ish key word
|
|
8206
|
+
id: "long-run",
|
|
8207
|
+
re: /(?<![A-Za-z0-9+/])[A-Za-z0-9+/]{40,4096}={0,2}(?![\w/])/g,
|
|
8208
|
+
// a bare 40-hex git SHA stays; it is only redacted as the value of a secret key
|
|
8209
|
+
replace: (m) => /^[0-9a-f]{40}$/i.test(m) ? m : REDACTED
|
|
8210
|
+
}
|
|
8211
|
+
];
|
|
8212
|
+
LINE_RULES = REDACT_RULES.filter((r) => r.id !== "long-run");
|
|
8213
|
+
LONG_RUN = REDACT_RULES.find((r) => r.id === "long-run");
|
|
8214
|
+
LONG_RUN_MAX_LINE = 64 * 1024;
|
|
8215
|
+
KEY_LINE = new RegExp(`(?:${KEY_WORDS})`, "i");
|
|
8216
|
+
}
|
|
8217
|
+
});
|
|
8218
|
+
|
|
8219
|
+
// src/hooks/ts/lib/build-gate.ts
|
|
8220
|
+
var init_build_gate = __esm({
|
|
8221
|
+
"src/hooks/ts/lib/build-gate.ts"() {
|
|
8222
|
+
"use strict";
|
|
8223
|
+
}
|
|
8224
|
+
});
|
|
8225
|
+
|
|
8226
|
+
// src/hooks/ts/lib/loop-guard.ts
|
|
8227
|
+
var LOOP_MAX_REPEATS, LOOP_READ_STREAK, SELF, LOOP_DENY_REASON, WAIT_CAP_MS, FP_FULL_READ_BYTES, FP_TOTAL_BYTES;
|
|
8228
|
+
var init_loop_guard = __esm({
|
|
8229
|
+
"src/hooks/ts/lib/loop-guard.ts"() {
|
|
8230
|
+
"use strict";
|
|
8231
|
+
init_hang_probe();
|
|
8232
|
+
init_redact();
|
|
8233
|
+
init_build_gate();
|
|
8234
|
+
LOOP_MAX_REPEATS = 4;
|
|
8235
|
+
LOOP_READ_STREAK = Number(process.env.PAI_LOOP_READ_STREAK) > 0 ? Number(process.env.PAI_LOOP_READ_STREAK) : 15;
|
|
8236
|
+
SELF = "If your part is done, commit and write your R report. If you are stuck, report the blocker in R x= (or use pai worker help if available).";
|
|
8237
|
+
LOOP_DENY_REASON = `loop guard: you ran this command ${LOOP_MAX_REPEATS} times with the same result and nothing changed. Stop repeating it. ${SELF}`;
|
|
8238
|
+
WAIT_CAP_MS = 45 * 6e4;
|
|
8239
|
+
FP_FULL_READ_BYTES = 256 * 1024;
|
|
8240
|
+
FP_TOTAL_BYTES = 4 * 1024 * 1024;
|
|
8241
|
+
}
|
|
8242
|
+
});
|
|
8243
|
+
|
|
8244
|
+
// src/audit/scan.ts
|
|
8245
|
+
var MAX_TEXT_BYTES;
|
|
8246
|
+
var init_scan = __esm({
|
|
8247
|
+
"src/audit/scan.ts"() {
|
|
8248
|
+
"use strict";
|
|
8249
|
+
init_loop_guard();
|
|
8250
|
+
MAX_TEXT_BYTES = 256 * 1024;
|
|
8251
|
+
}
|
|
8252
|
+
});
|
|
8253
|
+
|
|
8254
|
+
// src/hooks/ts/lib/rules/builtin.generated.ts
|
|
8255
|
+
var init_builtin_generated = __esm({
|
|
8256
|
+
"src/hooks/ts/lib/rules/builtin.generated.ts"() {
|
|
8257
|
+
"use strict";
|
|
8258
|
+
}
|
|
8259
|
+
});
|
|
8260
|
+
|
|
8261
|
+
// src/hooks/ts/lib/rules/load.ts
|
|
8262
|
+
var import_yaml6;
|
|
8263
|
+
var init_load = __esm({
|
|
8264
|
+
"src/hooks/ts/lib/rules/load.ts"() {
|
|
8265
|
+
"use strict";
|
|
8266
|
+
import_yaml6 = __toESM(require_dist(), 1);
|
|
8267
|
+
init_pai_home();
|
|
8268
|
+
init_builtin_generated();
|
|
8269
|
+
}
|
|
8270
|
+
});
|
|
8271
|
+
|
|
8272
|
+
// src/workers/scan.ts
|
|
8273
|
+
var init_scan2 = __esm({
|
|
8274
|
+
"src/workers/scan.ts"() {
|
|
8275
|
+
"use strict";
|
|
8276
|
+
init_scan();
|
|
8277
|
+
init_load();
|
|
8278
|
+
init_paths();
|
|
8279
|
+
init_status();
|
|
8280
|
+
}
|
|
8281
|
+
});
|
|
8282
|
+
|
|
8098
8283
|
// src/workers/render.ts
|
|
8099
8284
|
var init_render = __esm({
|
|
8100
8285
|
"src/workers/render.ts"() {
|
|
@@ -8114,6 +8299,7 @@ var init_render = __esm({
|
|
|
8114
8299
|
init_scope();
|
|
8115
8300
|
init_endreason();
|
|
8116
8301
|
init_report();
|
|
8302
|
+
init_scan2();
|
|
8117
8303
|
}
|
|
8118
8304
|
});
|
|
8119
8305
|
|
|
@@ -8170,6 +8356,8 @@ var init_pane_bar = __esm({
|
|
|
8170
8356
|
"use strict";
|
|
8171
8357
|
init_chatui();
|
|
8172
8358
|
init_render();
|
|
8359
|
+
init_capacity();
|
|
8360
|
+
init_pane_exec();
|
|
8173
8361
|
init_pane_policy();
|
|
8174
8362
|
}
|
|
8175
8363
|
});
|
|
@@ -8179,29 +8367,12 @@ var init_pane_exec = __esm({
|
|
|
8179
8367
|
"src/workers/pane-exec.ts"() {
|
|
8180
8368
|
"use strict";
|
|
8181
8369
|
init_pai_home();
|
|
8370
|
+
init_capacity();
|
|
8182
8371
|
init_pane_bar();
|
|
8183
8372
|
init_pane_policy();
|
|
8184
8373
|
}
|
|
8185
8374
|
});
|
|
8186
8375
|
|
|
8187
|
-
// src/workers/ps-table.ts
|
|
8188
|
-
import { execFileSync as execFileSync2 } from "node:child_process";
|
|
8189
|
-
function truncateLines(text, max = PS_MAX_LINE) {
|
|
8190
|
-
return text.split("\n").map((l) => l.length > max ? l.slice(0, max) : l).join("\n");
|
|
8191
|
-
}
|
|
8192
|
-
function psTable(format, run = realRunner, maxLine = PS_MAX_LINE) {
|
|
8193
|
-
return truncateLines(run(["-axo", format]), maxLine);
|
|
8194
|
-
}
|
|
8195
|
-
var PS_MAX_BUFFER, PS_MAX_LINE, realRunner;
|
|
8196
|
-
var init_ps_table = __esm({
|
|
8197
|
-
"src/workers/ps-table.ts"() {
|
|
8198
|
-
"use strict";
|
|
8199
|
-
PS_MAX_BUFFER = 64 * 1024 * 1024;
|
|
8200
|
-
PS_MAX_LINE = 1024;
|
|
8201
|
-
realRunner = (args) => execFileSync2("ps", args, { encoding: "utf8", env: { ...process.env, LC_ALL: "C" }, maxBuffer: PS_MAX_BUFFER, timeout: 15e3 });
|
|
8202
|
-
}
|
|
8203
|
-
});
|
|
8204
|
-
|
|
8205
8376
|
// src/workers/pane-title.ts
|
|
8206
8377
|
var init_pane_title = __esm({
|
|
8207
8378
|
"src/workers/pane-title.ts"() {
|
|
@@ -8177,6 +8177,7 @@ function defaultWorkersConfig() {
|
|
|
8177
8177
|
cacheKeepaliveSecs: num(w.cacheKeepaliveSecs, 0),
|
|
8178
8178
|
defaultMaxMinutes: num(w.defaultMaxMinutes, 60),
|
|
8179
8179
|
waitAlarmMinutes: num(w.waitAlarmMinutes, 120),
|
|
8180
|
+
scanBudgetMs: num(w.scanBudgetMs, 5e3),
|
|
8180
8181
|
stagger: {
|
|
8181
8182
|
enabled: bool(stagger.enabled, true),
|
|
8182
8183
|
localDefaultSec: num(stagger.localDefaultSec, 20),
|
|
@@ -8771,6 +8772,13 @@ function parseWorkersConfig(raw, yamlProviders = {}) {
|
|
|
8771
8772
|
}
|
|
8772
8773
|
waitAlarmMinutes = w.waitAlarmMinutes;
|
|
8773
8774
|
}
|
|
8775
|
+
let scanBudgetMs = d.scanBudgetMs ?? 5e3;
|
|
8776
|
+
if (w.scanBudgetMs !== void 0) {
|
|
8777
|
+
if (typeof w.scanBudgetMs !== "number" || !Number.isInteger(w.scanBudgetMs) || w.scanBudgetMs < 1) {
|
|
8778
|
+
bad(".scanBudgetMs", "must be a positive integer (milliseconds)");
|
|
8779
|
+
}
|
|
8780
|
+
scanBudgetMs = w.scanBudgetMs;
|
|
8781
|
+
}
|
|
8774
8782
|
const stagger = { ...d.stagger };
|
|
8775
8783
|
if (w.stagger !== void 0) {
|
|
8776
8784
|
if (typeof w.stagger !== "object" || w.stagger === null || Array.isArray(w.stagger)) {
|
|
@@ -8907,6 +8915,7 @@ function parseWorkersConfig(raw, yamlProviders = {}) {
|
|
|
8907
8915
|
cacheKeepaliveSecs,
|
|
8908
8916
|
defaultMaxMinutes,
|
|
8909
8917
|
waitAlarmMinutes,
|
|
8918
|
+
scanBudgetMs,
|
|
8910
8919
|
stagger,
|
|
8911
8920
|
capacity,
|
|
8912
8921
|
localIdle,
|
|
@@ -8180,6 +8180,7 @@ function defaultWorkersConfig() {
|
|
|
8180
8180
|
cacheKeepaliveSecs: num(w.cacheKeepaliveSecs, 0),
|
|
8181
8181
|
defaultMaxMinutes: num(w.defaultMaxMinutes, 60),
|
|
8182
8182
|
waitAlarmMinutes: num(w.waitAlarmMinutes, 120),
|
|
8183
|
+
scanBudgetMs: num(w.scanBudgetMs, 5e3),
|
|
8183
8184
|
stagger: {
|
|
8184
8185
|
enabled: bool(stagger.enabled, true),
|
|
8185
8186
|
localDefaultSec: num(stagger.localDefaultSec, 20),
|
|
@@ -8774,6 +8775,13 @@ function parseWorkersConfig(raw, yamlProviders = {}) {
|
|
|
8774
8775
|
}
|
|
8775
8776
|
waitAlarmMinutes = w.waitAlarmMinutes;
|
|
8776
8777
|
}
|
|
8778
|
+
let scanBudgetMs = d.scanBudgetMs ?? 5e3;
|
|
8779
|
+
if (w.scanBudgetMs !== void 0) {
|
|
8780
|
+
if (typeof w.scanBudgetMs !== "number" || !Number.isInteger(w.scanBudgetMs) || w.scanBudgetMs < 1) {
|
|
8781
|
+
bad(".scanBudgetMs", "must be a positive integer (milliseconds)");
|
|
8782
|
+
}
|
|
8783
|
+
scanBudgetMs = w.scanBudgetMs;
|
|
8784
|
+
}
|
|
8777
8785
|
const stagger = { ...d.stagger };
|
|
8778
8786
|
if (w.stagger !== void 0) {
|
|
8779
8787
|
if (typeof w.stagger !== "object" || w.stagger === null || Array.isArray(w.stagger)) {
|
|
@@ -8910,6 +8918,7 @@ function parseWorkersConfig(raw, yamlProviders = {}) {
|
|
|
8910
8918
|
cacheKeepaliveSecs,
|
|
8911
8919
|
defaultMaxMinutes,
|
|
8912
8920
|
waitAlarmMinutes,
|
|
8921
|
+
scanBudgetMs,
|
|
8913
8922
|
stagger,
|
|
8914
8923
|
capacity,
|
|
8915
8924
|
localIdle,
|
|
@@ -9254,7 +9263,7 @@ function ownsPid(status) {
|
|
|
9254
9263
|
env: { ...process.env, LC_ALL: "C" }
|
|
9255
9264
|
}).trim();
|
|
9256
9265
|
const psStart = Date.parse(out);
|
|
9257
|
-
const started = spawnTimeOf(status) ?? Date.parse(status.started.replace(" ", "T"));
|
|
9266
|
+
const started = status.procStart ?? spawnTimeOf(status) ?? Date.parse(status.started.replace(" ", "T"));
|
|
9258
9267
|
if (Number.isNaN(psStart) || Number.isNaN(started)) return alive(status.pid);
|
|
9259
9268
|
return Math.abs(psStart - started) <= 12e4;
|
|
9260
9269
|
} catch {
|
|
@@ -10408,6 +10417,93 @@ function wrapTestCommand(command) {
|
|
|
10408
10417
|
return `${WRAP} --cmd-b64 ${Buffer.from(command, "utf8").toString("base64")}`;
|
|
10409
10418
|
}
|
|
10410
10419
|
|
|
10420
|
+
// src/utils/redact.ts
|
|
10421
|
+
var REDACTED = "[REDACTED]";
|
|
10422
|
+
var REDACTED_RE = String.raw`\[REDACTED\]`;
|
|
10423
|
+
var KEY_WORDS = "password|passwd|secret|token|api[_-]?key|credential|auth(?:orization)?|bearer";
|
|
10424
|
+
var PROSE = "is|are|was|were|be|to|of|in|on|for|and|or|the|a|an|that|this|it|not|out|here|there|so|as|at|by|with|if|when|which";
|
|
10425
|
+
var VAL = String.raw`(?:"[^"]*"|'[^']*'|[^\s'"]+)`;
|
|
10426
|
+
var REDACT_RULES = [
|
|
10427
|
+
{
|
|
10428
|
+
// `Authorization: Bearer xxx` / `Authorization: Basic xxx` — keep the scheme
|
|
10429
|
+
id: "authorization",
|
|
10430
|
+
re: /(Authorization\s*:\s*)(Bearer|Basic)\s+([^\s'"]+)/gi,
|
|
10431
|
+
replace: (_m, head, scheme) => `${head}${scheme} ${REDACTED}`
|
|
10432
|
+
},
|
|
10433
|
+
{
|
|
10434
|
+
// `Cookie: a=b; c=d` — keep the cookie names, redact every value
|
|
10435
|
+
id: "cookie",
|
|
10436
|
+
re: /((?:Set-)?Cookie\s*:\s*)([^\n]+)/gi,
|
|
10437
|
+
replace: (_m, head, rest) => `${head}${rest.replace(/([^=;\s'"]+=)[^;'"]*/g, `$1${REDACTED}`)}`
|
|
10438
|
+
},
|
|
10439
|
+
{
|
|
10440
|
+
// `key=value`, `key: value`, `"key": "value"` — key carries a secret-ish word;
|
|
10441
|
+
// the word must be a whole key segment, so `monkeys=` stays untouched.
|
|
10442
|
+
// The separator may start with the key's closing quote (JSON); it is kept.
|
|
10443
|
+
id: "key-value",
|
|
10444
|
+
re: new RegExp(String.raw`(?<![A-Za-z0-9])((?:[A-Za-z0-9]+[_-])?(?:${KEY_WORDS})(?![A-Za-z0-9])[A-Za-z0-9_-]*)(["']?\s*[:=]\s*)(?!(?:Bearer|Basic) ${REDACTED_RE})(?!(?:${PROSE})\b)(${VAL})`, "gi"),
|
|
10445
|
+
replace: (m, key, sep, val) => {
|
|
10446
|
+
if (/[_-](?:count|length|len|size|limit|max|min|budget)$/i.test(key) && /^\d+$/.test(val)) return m;
|
|
10447
|
+
const q = sep[0] === '"' || sep[0] === "'" ? val[0] : "";
|
|
10448
|
+
return q && (q === '"' || q === "'") ? `${key}${sep}${q}${REDACTED}${q}` : `${key}${sep}${REDACTED}`;
|
|
10449
|
+
}
|
|
10450
|
+
},
|
|
10451
|
+
{
|
|
10452
|
+
// npmrc `//registry/:_authToken=xxx`
|
|
10453
|
+
id: "npm-auth-token",
|
|
10454
|
+
re: new RegExp(String.raw`(_authToken\s*=\s*)(${VAL})`, "g"),
|
|
10455
|
+
replace: (_m, head) => `${head}${REDACTED}`
|
|
10456
|
+
},
|
|
10457
|
+
{
|
|
10458
|
+
// `curl -u user:pass` / `--user user:pass` — keep the user
|
|
10459
|
+
id: "curl-user",
|
|
10460
|
+
re: /(\bcurl\b[^\n]{0,500}?\s(?:-u|--user)[\s=]+['"]?[^\s:'"]+:)([^\s'"]+)/g,
|
|
10461
|
+
replace: (_m, head) => `${head}${REDACTED}`
|
|
10462
|
+
},
|
|
10463
|
+
{
|
|
10464
|
+
// `mysql -phunter2` / `mysqldump -p'hunter2'` — attached password only
|
|
10465
|
+
id: "mysql-p",
|
|
10466
|
+
re: /(\bmysql(?:dump)?\b[^\n]{0,300}?\s-p)('[^']*'|"[^"]*"|[^\s'"-][^\s'"]*)/g,
|
|
10467
|
+
replace: (_m, head) => `${head}${REDACTED}`
|
|
10468
|
+
},
|
|
10469
|
+
{
|
|
10470
|
+
// `export FOO_TOKEN=...` / `FOO_KEY=...` — SCREAMING_SNAKE env style
|
|
10471
|
+
id: "env-style",
|
|
10472
|
+
re: new RegExp(String.raw`(?<![A-Za-z0-9])((?:export\s+)?[A-Z][A-Z0-9]*_(?:KEY|SECRET|TOKEN|PASS\w*|CRED\w*|AUTH\w*)\s*=\s*)(${VAL})`, "g"),
|
|
10473
|
+
replace: (_m, head) => `${head}${REDACTED}`
|
|
10474
|
+
},
|
|
10475
|
+
{
|
|
10476
|
+
// long CLI flags only: `--password X`, `--token X`, `--api-key X`, `--secret X`, `--passwd X`
|
|
10477
|
+
id: "cli-flag",
|
|
10478
|
+
re: new RegExp(String.raw`(--(?:password|token|api-key|secret|passwd)(?:\s*=\s*|\s+))(${VAL})`, "gi"),
|
|
10479
|
+
replace: (_m, head) => `${head}${REDACTED}`
|
|
10480
|
+
},
|
|
10481
|
+
{
|
|
10482
|
+
// `scheme://user:pass@host` — redact the password, keep user and host
|
|
10483
|
+
id: "url-credentials",
|
|
10484
|
+
re: /((?<![a-z0-9+.-])[a-z][a-z0-9+.-]*:\/\/[^\s/@:]+:)([^\s/@]+)(@)/gi,
|
|
10485
|
+
replace: (_m, head, _pass, at) => `${head}${REDACTED}${at}`
|
|
10486
|
+
},
|
|
10487
|
+
{
|
|
10488
|
+
// provider token prefixes: sk-ant-, sk-, ghp_/gho_/ghu_/ghs_/ghr_, github_pat_,
|
|
10489
|
+
// glpat-, xoxb-/xoxp-/xoxa-, AKIA/ASIA + 16 chars, AIza + 35 chars, JWT (eyJ… three segments)
|
|
10490
|
+
id: "token-prefix",
|
|
10491
|
+
re: /\b(?:sk-ant-[A-Za-z0-9_-]{20,}|sk-[A-Za-z0-9_-]{20,}|gh[pousr]_[A-Za-z0-9]{30,}|github_pat_[A-Za-z0-9_]{22,}|glpat-[A-Za-z0-9_-]{20,}|xox[bap]-[A-Za-z0-9-]{10,}|(?:AKIA|ASIA|AGPA|AIDA|AROA)[A-Z0-9]{16}|[sr]k_(?:live|test)_[A-Za-z0-9]{20,}|npm_[A-Za-z0-9]{36}|hf_[A-Za-z0-9]{30,}|AIza[A-Za-z0-9_-]{35}(?![A-Za-z0-9_-])|eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+)(?![A-Za-z0-9_-])/g,
|
|
10492
|
+
replace: REDACTED
|
|
10493
|
+
},
|
|
10494
|
+
{
|
|
10495
|
+
// 40+ char opaque base64/hex run, only on a line that also has a secret-ish key word
|
|
10496
|
+
id: "long-run",
|
|
10497
|
+
re: /(?<![A-Za-z0-9+/])[A-Za-z0-9+/]{40,4096}={0,2}(?![\w/])/g,
|
|
10498
|
+
// a bare 40-hex git SHA stays; it is only redacted as the value of a secret key
|
|
10499
|
+
replace: (m) => /^[0-9a-f]{40}$/i.test(m) ? m : REDACTED
|
|
10500
|
+
}
|
|
10501
|
+
];
|
|
10502
|
+
var LINE_RULES = REDACT_RULES.filter((r) => r.id !== "long-run");
|
|
10503
|
+
var LONG_RUN = REDACT_RULES.find((r) => r.id === "long-run");
|
|
10504
|
+
var LONG_RUN_MAX_LINE = 64 * 1024;
|
|
10505
|
+
var KEY_LINE = new RegExp(`(?:${KEY_WORDS})`, "i");
|
|
10506
|
+
|
|
10411
10507
|
// src/hooks/ts/lib/build-gate.ts
|
|
10412
10508
|
import { execFileSync as execFileSync7 } from "node:child_process";
|
|
10413
10509
|
import { existsSync as existsSync12, readFileSync as readFileSync12, realpathSync as realpathSync2 } from "node:fs";
|
|
@@ -8177,6 +8177,7 @@ function defaultWorkersConfig() {
|
|
|
8177
8177
|
cacheKeepaliveSecs: num(w.cacheKeepaliveSecs, 0),
|
|
8178
8178
|
defaultMaxMinutes: num(w.defaultMaxMinutes, 60),
|
|
8179
8179
|
waitAlarmMinutes: num(w.waitAlarmMinutes, 120),
|
|
8180
|
+
scanBudgetMs: num(w.scanBudgetMs, 5e3),
|
|
8180
8181
|
stagger: {
|
|
8181
8182
|
enabled: bool(stagger.enabled, true),
|
|
8182
8183
|
localDefaultSec: num(stagger.localDefaultSec, 20),
|
|
@@ -8771,6 +8772,13 @@ function parseWorkersConfig(raw, yamlProviders = {}) {
|
|
|
8771
8772
|
}
|
|
8772
8773
|
waitAlarmMinutes = w.waitAlarmMinutes;
|
|
8773
8774
|
}
|
|
8775
|
+
let scanBudgetMs = d.scanBudgetMs ?? 5e3;
|
|
8776
|
+
if (w.scanBudgetMs !== void 0) {
|
|
8777
|
+
if (typeof w.scanBudgetMs !== "number" || !Number.isInteger(w.scanBudgetMs) || w.scanBudgetMs < 1) {
|
|
8778
|
+
bad(".scanBudgetMs", "must be a positive integer (milliseconds)");
|
|
8779
|
+
}
|
|
8780
|
+
scanBudgetMs = w.scanBudgetMs;
|
|
8781
|
+
}
|
|
8774
8782
|
const stagger = { ...d.stagger };
|
|
8775
8783
|
if (w.stagger !== void 0) {
|
|
8776
8784
|
if (typeof w.stagger !== "object" || w.stagger === null || Array.isArray(w.stagger)) {
|
|
@@ -8907,6 +8915,7 @@ function parseWorkersConfig(raw, yamlProviders = {}) {
|
|
|
8907
8915
|
cacheKeepaliveSecs,
|
|
8908
8916
|
defaultMaxMinutes,
|
|
8909
8917
|
waitAlarmMinutes,
|
|
8918
|
+
scanBudgetMs,
|
|
8910
8919
|
stagger,
|
|
8911
8920
|
capacity,
|
|
8912
8921
|
localIdle,
|
|
@@ -9243,6 +9252,104 @@ function currentWorkerId(env = process.env, logDir) {
|
|
|
9243
9252
|
// src/workers/ps-table.ts
|
|
9244
9253
|
var PS_MAX_BUFFER = 64 * 1024 * 1024;
|
|
9245
9254
|
|
|
9255
|
+
// src/utils/redact.ts
|
|
9256
|
+
var REDACTED = "[REDACTED]";
|
|
9257
|
+
var REDACTED_RE = String.raw`\[REDACTED\]`;
|
|
9258
|
+
var KEY_WORDS = "password|passwd|secret|token|api[_-]?key|credential|auth(?:orization)?|bearer";
|
|
9259
|
+
var PROSE = "is|are|was|were|be|to|of|in|on|for|and|or|the|a|an|that|this|it|not|out|here|there|so|as|at|by|with|if|when|which";
|
|
9260
|
+
var VAL = String.raw`(?:"[^"]*"|'[^']*'|[^\s'"]+)`;
|
|
9261
|
+
var REDACT_RULES = [
|
|
9262
|
+
{
|
|
9263
|
+
// `Authorization: Bearer xxx` / `Authorization: Basic xxx` — keep the scheme
|
|
9264
|
+
id: "authorization",
|
|
9265
|
+
re: /(Authorization\s*:\s*)(Bearer|Basic)\s+([^\s'"]+)/gi,
|
|
9266
|
+
replace: (_m, head, scheme) => `${head}${scheme} ${REDACTED}`
|
|
9267
|
+
},
|
|
9268
|
+
{
|
|
9269
|
+
// `Cookie: a=b; c=d` — keep the cookie names, redact every value
|
|
9270
|
+
id: "cookie",
|
|
9271
|
+
re: /((?:Set-)?Cookie\s*:\s*)([^\n]+)/gi,
|
|
9272
|
+
replace: (_m, head, rest) => `${head}${rest.replace(/([^=;\s'"]+=)[^;'"]*/g, `$1${REDACTED}`)}`
|
|
9273
|
+
},
|
|
9274
|
+
{
|
|
9275
|
+
// `key=value`, `key: value`, `"key": "value"` — key carries a secret-ish word;
|
|
9276
|
+
// the word must be a whole key segment, so `monkeys=` stays untouched.
|
|
9277
|
+
// The separator may start with the key's closing quote (JSON); it is kept.
|
|
9278
|
+
id: "key-value",
|
|
9279
|
+
re: new RegExp(String.raw`(?<![A-Za-z0-9])((?:[A-Za-z0-9]+[_-])?(?:${KEY_WORDS})(?![A-Za-z0-9])[A-Za-z0-9_-]*)(["']?\s*[:=]\s*)(?!(?:Bearer|Basic) ${REDACTED_RE})(?!(?:${PROSE})\b)(${VAL})`, "gi"),
|
|
9280
|
+
replace: (m, key, sep, val) => {
|
|
9281
|
+
if (/[_-](?:count|length|len|size|limit|max|min|budget)$/i.test(key) && /^\d+$/.test(val)) return m;
|
|
9282
|
+
const q = sep[0] === '"' || sep[0] === "'" ? val[0] : "";
|
|
9283
|
+
return q && (q === '"' || q === "'") ? `${key}${sep}${q}${REDACTED}${q}` : `${key}${sep}${REDACTED}`;
|
|
9284
|
+
}
|
|
9285
|
+
},
|
|
9286
|
+
{
|
|
9287
|
+
// npmrc `//registry/:_authToken=xxx`
|
|
9288
|
+
id: "npm-auth-token",
|
|
9289
|
+
re: new RegExp(String.raw`(_authToken\s*=\s*)(${VAL})`, "g"),
|
|
9290
|
+
replace: (_m, head) => `${head}${REDACTED}`
|
|
9291
|
+
},
|
|
9292
|
+
{
|
|
9293
|
+
// `curl -u user:pass` / `--user user:pass` — keep the user
|
|
9294
|
+
id: "curl-user",
|
|
9295
|
+
re: /(\bcurl\b[^\n]{0,500}?\s(?:-u|--user)[\s=]+['"]?[^\s:'"]+:)([^\s'"]+)/g,
|
|
9296
|
+
replace: (_m, head) => `${head}${REDACTED}`
|
|
9297
|
+
},
|
|
9298
|
+
{
|
|
9299
|
+
// `mysql -phunter2` / `mysqldump -p'hunter2'` — attached password only
|
|
9300
|
+
id: "mysql-p",
|
|
9301
|
+
re: /(\bmysql(?:dump)?\b[^\n]{0,300}?\s-p)('[^']*'|"[^"]*"|[^\s'"-][^\s'"]*)/g,
|
|
9302
|
+
replace: (_m, head) => `${head}${REDACTED}`
|
|
9303
|
+
},
|
|
9304
|
+
{
|
|
9305
|
+
// `export FOO_TOKEN=...` / `FOO_KEY=...` — SCREAMING_SNAKE env style
|
|
9306
|
+
id: "env-style",
|
|
9307
|
+
re: new RegExp(String.raw`(?<![A-Za-z0-9])((?:export\s+)?[A-Z][A-Z0-9]*_(?:KEY|SECRET|TOKEN|PASS\w*|CRED\w*|AUTH\w*)\s*=\s*)(${VAL})`, "g"),
|
|
9308
|
+
replace: (_m, head) => `${head}${REDACTED}`
|
|
9309
|
+
},
|
|
9310
|
+
{
|
|
9311
|
+
// long CLI flags only: `--password X`, `--token X`, `--api-key X`, `--secret X`, `--passwd X`
|
|
9312
|
+
id: "cli-flag",
|
|
9313
|
+
re: new RegExp(String.raw`(--(?:password|token|api-key|secret|passwd)(?:\s*=\s*|\s+))(${VAL})`, "gi"),
|
|
9314
|
+
replace: (_m, head) => `${head}${REDACTED}`
|
|
9315
|
+
},
|
|
9316
|
+
{
|
|
9317
|
+
// `scheme://user:pass@host` — redact the password, keep user and host
|
|
9318
|
+
id: "url-credentials",
|
|
9319
|
+
re: /((?<![a-z0-9+.-])[a-z][a-z0-9+.-]*:\/\/[^\s/@:]+:)([^\s/@]+)(@)/gi,
|
|
9320
|
+
replace: (_m, head, _pass, at) => `${head}${REDACTED}${at}`
|
|
9321
|
+
},
|
|
9322
|
+
{
|
|
9323
|
+
// provider token prefixes: sk-ant-, sk-, ghp_/gho_/ghu_/ghs_/ghr_, github_pat_,
|
|
9324
|
+
// glpat-, xoxb-/xoxp-/xoxa-, AKIA/ASIA + 16 chars, AIza + 35 chars, JWT (eyJ… three segments)
|
|
9325
|
+
id: "token-prefix",
|
|
9326
|
+
re: /\b(?:sk-ant-[A-Za-z0-9_-]{20,}|sk-[A-Za-z0-9_-]{20,}|gh[pousr]_[A-Za-z0-9]{30,}|github_pat_[A-Za-z0-9_]{22,}|glpat-[A-Za-z0-9_-]{20,}|xox[bap]-[A-Za-z0-9-]{10,}|(?:AKIA|ASIA|AGPA|AIDA|AROA)[A-Z0-9]{16}|[sr]k_(?:live|test)_[A-Za-z0-9]{20,}|npm_[A-Za-z0-9]{36}|hf_[A-Za-z0-9]{30,}|AIza[A-Za-z0-9_-]{35}(?![A-Za-z0-9_-])|eyJ[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+)(?![A-Za-z0-9_-])/g,
|
|
9327
|
+
replace: REDACTED
|
|
9328
|
+
},
|
|
9329
|
+
{
|
|
9330
|
+
// 40+ char opaque base64/hex run, only on a line that also has a secret-ish key word
|
|
9331
|
+
id: "long-run",
|
|
9332
|
+
re: /(?<![A-Za-z0-9+/])[A-Za-z0-9+/]{40,4096}={0,2}(?![\w/])/g,
|
|
9333
|
+
// a bare 40-hex git SHA stays; it is only redacted as the value of a secret key
|
|
9334
|
+
replace: (m) => /^[0-9a-f]{40}$/i.test(m) ? m : REDACTED
|
|
9335
|
+
}
|
|
9336
|
+
];
|
|
9337
|
+
var PEM_BLOCK = /-----BEGIN[^-\n]*PRIVATE KEY-----[\s\S]*?(?:-----END[^-\n]*PRIVATE KEY-----|$)/g;
|
|
9338
|
+
var LINE_RULES = REDACT_RULES.filter((r) => r.id !== "long-run");
|
|
9339
|
+
var LONG_RUN = REDACT_RULES.find((r) => r.id === "long-run");
|
|
9340
|
+
var LONG_RUN_MAX_LINE = 64 * 1024;
|
|
9341
|
+
var KEY_LINE = new RegExp(`(?:${KEY_WORDS})`, "i");
|
|
9342
|
+
function redactLine(line) {
|
|
9343
|
+
let out = line;
|
|
9344
|
+
for (const r of LINE_RULES) out = out.replace(r.re, r.replace);
|
|
9345
|
+
if (out.length <= LONG_RUN_MAX_LINE && KEY_LINE.test(out)) out = out.replace(LONG_RUN.re, LONG_RUN.replace);
|
|
9346
|
+
return out;
|
|
9347
|
+
}
|
|
9348
|
+
function redactSecrets(text) {
|
|
9349
|
+
const withPem = text.replace(PEM_BLOCK, `-----BEGIN PRIVATE KEY----- ${REDACTED}`);
|
|
9350
|
+
return withPem.split("\n").map(redactLine).join("\n");
|
|
9351
|
+
}
|
|
9352
|
+
|
|
9246
9353
|
// src/hooks/ts/lib/loop-guard.ts
|
|
9247
9354
|
var LOOP_MAX_REPEATS = 4;
|
|
9248
9355
|
var LOOP_READ_STREAK = Number(process.env.PAI_LOOP_READ_STREAK) > 0 ? Number(process.env.PAI_LOOP_READ_STREAK) : 15;
|
|
@@ -9360,10 +9467,8 @@ ${typeof r.stderr === "string" ? r.stderr : ""}`;
|
|
|
9360
9467
|
text = text.replace(TMP_PATH, "TMP").replace(/\s+/g, " ").trim();
|
|
9361
9468
|
return text.length > RESULT_CHARS ? `${text.slice(0, RESULT_CHARS / 2)} ${text.slice(-RESULT_CHARS / 2)}` : text;
|
|
9362
9469
|
}
|
|
9363
|
-
var SECRET_LINE = /pass(?:word|wd)|secret|token|api[_-]?key|credential|authorization|bearer|private key|^\s*(?:export\s+)?[A-Z][A-Z0-9_]*(?:KEY|SECRET|TOKEN|PASS\w*|CRED\w*|AUTH\w*)\s*=|\b(?:sk|ghp|gho|xox[bap])[-_][A-Za-z0-9_-]{16,}|\b[A-Za-z0-9+]{40,}={0,2}(?![\w/])|\b[a-z][a-z0-9+.-]*:\/\/[^\s\/:@]+:[^\s\/@]+@|\b(?:AKIA|ASIA|AGPA|AIDA|AROA)[A-Z0-9]{16}\b|\bgh[pousr]_[A-Za-z0-9]{20,}/i;
|
|
9364
|
-
var MASKED_LINE = "[line masked: looks like a secret]";
|
|
9365
9470
|
function maskSecrets(text) {
|
|
9366
|
-
return text
|
|
9471
|
+
return redactSecrets(text);
|
|
9367
9472
|
}
|
|
9368
9473
|
function rawText(response) {
|
|
9369
9474
|
if (typeof response === "string") return response;
|