@garygentry/system1-core 0.3.2 → 0.4.0

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.
Files changed (78) hide show
  1. package/dist/egress/scrub.d.ts.map +1 -1
  2. package/dist/egress/scrub.js +16 -0
  3. package/dist/egress/scrub.js.map +1 -1
  4. package/dist/index.d.ts +11 -1
  5. package/dist/index.d.ts.map +1 -1
  6. package/dist/index.js +6 -1
  7. package/dist/index.js.map +1 -1
  8. package/dist/model/schema.d.ts +22 -0
  9. package/dist/model/schema.d.ts.map +1 -0
  10. package/dist/model/schema.js +26 -0
  11. package/dist/model/schema.js.map +1 -0
  12. package/dist/opportunities/backlog.d.ts +280 -0
  13. package/dist/opportunities/backlog.d.ts.map +1 -0
  14. package/dist/opportunities/backlog.js +393 -0
  15. package/dist/opportunities/backlog.js.map +1 -0
  16. package/dist/prepare.d.ts +8 -0
  17. package/dist/prepare.d.ts.map +1 -1
  18. package/dist/prepare.js +42 -6
  19. package/dist/prepare.js.map +1 -1
  20. package/dist/project/project.d.ts +36 -0
  21. package/dist/project/project.d.ts.map +1 -1
  22. package/dist/project/project.js +64 -18
  23. package/dist/project/project.js.map +1 -1
  24. package/dist/sources/filter.d.ts +19 -0
  25. package/dist/sources/filter.d.ts.map +1 -0
  26. package/dist/sources/filter.js +30 -0
  27. package/dist/sources/filter.js.map +1 -0
  28. package/dist/sources/read.d.ts +10 -0
  29. package/dist/sources/read.d.ts.map +1 -1
  30. package/dist/sources/read.js +7 -2
  31. package/dist/sources/read.js.map +1 -1
  32. package/dist/sources/types.d.ts +2 -2
  33. package/dist/sources/types.d.ts.map +1 -1
  34. package/dist/spec/lint.d.ts +35 -0
  35. package/dist/spec/lint.d.ts.map +1 -0
  36. package/dist/spec/lint.js +175 -0
  37. package/dist/spec/lint.js.map +1 -0
  38. package/dist/spec/spec.d.ts +2 -0
  39. package/dist/spec/spec.d.ts.map +1 -1
  40. package/dist/spec/spec.js +3 -1
  41. package/dist/spec/spec.js.map +1 -1
  42. package/dist/tools/ask.d.ts.map +1 -1
  43. package/dist/tools/ask.js +10 -13
  44. package/dist/tools/ask.js.map +1 -1
  45. package/dist/tools/context.d.ts +5 -0
  46. package/dist/tools/context.d.ts.map +1 -1
  47. package/dist/tools/context.js +24 -0
  48. package/dist/tools/context.js.map +1 -1
  49. package/dist/tools/doctor.d.ts +1 -1
  50. package/dist/tools/doctor.d.ts.map +1 -1
  51. package/dist/tools/doctor.js +33 -1
  52. package/dist/tools/doctor.js.map +1 -1
  53. package/dist/tools/many.d.ts.map +1 -1
  54. package/dist/tools/many.js +3 -0
  55. package/dist/tools/many.js.map +1 -1
  56. package/dist/tools/opportunities.d.ts +33 -0
  57. package/dist/tools/opportunities.d.ts.map +1 -0
  58. package/dist/tools/opportunities.js +74 -0
  59. package/dist/tools/opportunities.js.map +1 -0
  60. package/dist/tools/schemas.d.ts +155 -12
  61. package/dist/tools/schemas.d.ts.map +1 -1
  62. package/dist/tools/schemas.js +32 -25
  63. package/dist/tools/schemas.js.map +1 -1
  64. package/dist/tools/spec-check.d.ts +6 -0
  65. package/dist/tools/spec-check.d.ts.map +1 -1
  66. package/dist/tools/spec-check.js +3 -0
  67. package/dist/tools/spec-check.js.map +1 -1
  68. package/dist/tools/spec-lint.d.ts +31 -0
  69. package/dist/tools/spec-lint.d.ts.map +1 -0
  70. package/dist/tools/spec-lint.js +53 -0
  71. package/dist/tools/spec-lint.js.map +1 -0
  72. package/dist/transport/openrouter.d.ts +4 -1
  73. package/dist/transport/openrouter.d.ts.map +1 -1
  74. package/dist/transport/openrouter.js +5 -2
  75. package/dist/transport/openrouter.js.map +1 -1
  76. package/dist/version.d.ts +1 -1
  77. package/dist/version.js +1 -1
  78. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"scrub.d.ts","sourceRoot":"","sources":["../../src/egress/scrub.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AA0D3D,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAEhD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,WAAgB,GAAG,MAAM,CASxE;AAED,2EAA2E;AAC3E,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,GAAE,WAAgB,GAAG,KAAK,CAExE;AAwBD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,GAAE,WAAgB,GAAG,WAAW,CAW5F"}
1
+ {"version":3,"file":"scrub.d.ts","sourceRoot":"","sources":["../../src/egress/scrub.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AA4E3D,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAEhD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,WAAgB,GAAG,MAAM,CASxE;AAED,2EAA2E;AAC3E,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,GAAE,WAAgB,GAAG,KAAK,CAExE;AAwBD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,WAAW,EAAE,MAAM,GAAE,WAAgB,GAAG,WAAW,CAW5F"}
@@ -16,6 +16,13 @@ const RULES = [
16
16
  { kind: "slack-token", pattern: /\bxox[baprs]-[A-Za-z0-9-]{10,}\b/g },
17
17
  { kind: "stripe-key", pattern: /\b[rs]k_(?:live|test)_[A-Za-z0-9]{16,}\b/g },
18
18
  { kind: "google-api-key", pattern: /\bAIza[0-9A-Za-z_-]{35}\b/g },
19
+ // Service tokens with a known prefix and separator, whatever they are
20
+ // assigned to (MCP server env blocks name them freely: NOTION_INTEGRATION,
21
+ // HONEYCOMB_WRITEKEY).
22
+ {
23
+ kind: "service-token",
24
+ pattern: /\b(?:secret_|ntn_|glpat-|npm_|pypi-|shpat_|shpss_|dop_v1_|hcaik_|hcxik_|sntrys_|lin_api_|figd_|xapp-)[A-Za-z0-9_]{20,}\b/g,
25
+ },
19
26
  { kind: "jwt", pattern: /\beyJ[A-Za-z0-9_-]{8,}\.eyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\b/g },
20
27
  { kind: "url-credentials", pattern: /(?<=\b[a-z][a-z0-9+.-]*:\/\/[^\s:/@]+:)[^\s@/]{3,}(?=@)/gi },
21
28
  // NAME = "literal": a quoted value of 8+ chars assigned to a secret-sounding name.
@@ -30,6 +37,15 @@ const RULES = [
30
37
  kind: "assigned-secret",
31
38
  pattern: new RegExp(`(?<=\\b${SECRET_NAME}\\s*[:=]\\s*)(?!\\$\\{|<|\\[REDACTED)(?=[A-Za-z_\\-+/=~]*\\d)[A-Za-z0-9_\\-+/=~]{8,}(?![\\w(.])`, "gi"),
32
39
  },
40
+ // ENV_NAME: "value" in upper-case environment style, ending in a credential
41
+ // word (API_WRITEKEY, SERVICE_PAT). Case-sensitive, and the value must look
42
+ // like a credential (12+ characters, letters and digits, no dots or colons),
43
+ // so UI constants (`PROBE_KEY = "pulse:probe"`) and code are left alone.
44
+ // Last, so a value an earlier rule already caught keeps that rule's name.
45
+ {
46
+ kind: "env-secret",
47
+ pattern: /(?<=\b[A-Z][A-Z0-9_]*(?:KEY|TOKEN|SECRET|PASSWORD|PASS|PAT|CREDENTIALS?)["']?\s*[:=]\s*["']?)(?!\$\{|<|\[REDACTED)(?=[A-Za-z0-9_\-+/=~]*\d)(?=[A-Za-z0-9_\-+/=~]*[A-Za-z])[A-Za-z0-9_\-+/=~]{12,}(?=["'\s,}]|$)/gm,
48
+ },
33
49
  ];
34
50
  export function scrubText(text, counts = {}) {
35
51
  let out = text;
@@ -1 +1 @@
1
- {"version":3,"file":"scrub.js","sourceRoot":"","sources":["../../src/egress/scrub.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scrub.js","sourceRoot":"","sources":["../../src/egress/scrub.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -18,6 +18,8 @@ export type { ModelProfile } from "./model/profiles.js";
18
18
  export { DEFAULT_MODEL_ID, PROFILES, projectCost, resolveProfile } from "./model/profiles.js";
19
19
  export type * from "./model/types.js";
20
20
  export { assertQuestionSet, parseDecisionResponse } from "./model/validate.js";
21
+ export type { Backlog, Candidate, Opportunity, OpportunityStatus } from "./opportunities/backlog.js";
22
+ export { BACKLOG_FORMAT, BacklogSchema, backlogPath, backlogProblems, CandidateSchema, opportunityId, projectedSaving, } from "./opportunities/backlog.js";
21
23
  export type { PingOptions, PingResult } from "./ping.js";
22
24
  export { ping, probeUrl } from "./ping.js";
23
25
  export type { Prepared, PrepareInput } from "./prepare.js";
@@ -31,10 +33,14 @@ export { checkBudget, project } from "./run/budget.js";
31
33
  export { mapWithConcurrency } from "./run/pool.js";
32
34
  export type { AnswerSource, SpendEntry, SpendSummary } from "./run/spend.js";
33
35
  export { SpendLedger, sumUsage } from "./run/spend.js";
36
+ export type { FilterResult } from "./sources/filter.js";
37
+ export { applyFilter } from "./sources/filter.js";
34
38
  export { gitIgnored, parseFileRef, readSources, splitDiffByFile } from "./sources/read.js";
35
39
  export type { Document, Item, LineRange, Skipped, SourceSpec } from "./sources/types.js";
36
40
  export type { Expectation } from "./spec/expect.js";
37
41
  export { describeExpectation, meets, parseExpect } from "./spec/expect.js";
42
+ export type { LintCheck, LintFinding, LintSeverity } from "./spec/lint.js";
43
+ export { LINT_CHECKS, LINT_SEVERITY, lintQuestions, lintSpec, lintStatement, } from "./spec/lint.js";
38
44
  export type { Spec, SpecDirs, SpecFile, SpecListing } from "./spec/spec.js";
39
45
  export { assertExamples, exampleProblems, listSpecs, loadSpec, parseQuestionSet, parseSpec, SpecSchema, specDirs, } from "./spec/spec.js";
40
46
  export type { SplitSpec } from "./split/split.js";
@@ -47,12 +53,16 @@ export type { CheckStatus, DoctorCheck, DoctorOptions, DoctorResult } from "./to
47
53
  export { CODEX_RULE, DOCTOR_CHECKS, runDoctor, which } from "./tools/doctor.js";
48
54
  export type { ManyResult, ResultRow, SkippedSummary } from "./tools/many.js";
49
55
  export { runMany, summariseSkipped } from "./tools/many.js";
56
+ export type { OpportunitiesAddResult, OpportunitiesCheckResult, OpportunitiesListResult, } from "./tools/opportunities.js";
57
+ export { runOpportunitiesAdd, runOpportunitiesCheck, runOpportunitiesList, } from "./tools/opportunities.js";
50
58
  export type { RouteToolResult } from "./tools/route.js";
51
59
  export { runRoute } from "./tools/route.js";
52
60
  export type { ToolName } from "./tools/schemas.js";
53
- export { AskInput, ManyInput, RouteInput, SpecCheckInput, TOOL_SCHEMAS, UsageInput, } from "./tools/schemas.js";
61
+ export { AskInput, ManyInput, OpportunitiesAddInput, OpportunitiesCheckInput, OpportunitiesListInput, RouteInput, SpecCheckInput, SpecLintInput, TOOL_SCHEMAS, UsageInput, } from "./tools/schemas.js";
54
62
  export type { ExampleResult, ExampleStatus, SpecCheckResult } from "./tools/spec-check.js";
55
63
  export { runSpecCheck } from "./tools/spec-check.js";
64
+ export type { SpecLintEntry, SpecLintResult } from "./tools/spec-lint.js";
65
+ export { runSpecLint } from "./tools/spec-lint.js";
56
66
  export type { UsageResult } from "./tools/usage.js";
57
67
  export { runUsage } from "./tools/usage.js";
58
68
  export type { Transport, TransportOptions, TransportResult } from "./transport/openrouter.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -10,6 +10,7 @@ export { canonicalJson, FIXTURE_VERSION, FixtureStore, fixtureKey } from "./fixt
10
10
  export { confidenceOf, DEFAULT_UNDECIDED_FLOOR, isChoice, isNoul, isScore, isUndecided, noulConfidence, rankedProbabilities, undecidedNames, } from "./model/answers.js";
11
11
  export { DEFAULT_MODEL_ID, PROFILES, projectCost, resolveProfile } from "./model/profiles.js";
12
12
  export { assertQuestionSet, parseDecisionResponse } from "./model/validate.js";
13
+ export { BACKLOG_FORMAT, BacklogSchema, backlogPath, backlogProblems, CandidateSchema, opportunityId, projectedSaving, } from "./opportunities/backlog.js";
13
14
  export { ping, probeUrl } from "./ping.js";
14
15
  export { prepare } from "./prepare.js";
15
16
  export { matches, parseFilter, parseSort, project as projectRows } from "./project/project.js";
@@ -17,17 +18,21 @@ export { activeTriggers, BUILTIN_IGNORE, BUILTIN_TRIGGERS, DEFAULT_MESSAGE, ROUT
17
18
  export { checkBudget, project } from "./run/budget.js";
18
19
  export { mapWithConcurrency } from "./run/pool.js";
19
20
  export { SpendLedger, sumUsage } from "./run/spend.js";
21
+ export { applyFilter } from "./sources/filter.js";
20
22
  export { gitIgnored, parseFileRef, readSources, splitDiffByFile } from "./sources/read.js";
21
23
  export { describeExpectation, meets, parseExpect } from "./spec/expect.js";
24
+ export { LINT_CHECKS, LINT_SEVERITY, lintQuestions, lintSpec, lintStatement, } from "./spec/lint.js";
22
25
  export { assertExamples, exampleProblems, listSpecs, loadSpec, parseQuestionSet, parseSpec, SpecSchema, specDirs, } from "./spec/spec.js";
23
26
  export { parseSplit, split } from "./split/split.js";
24
27
  export { runAsk } from "./tools/ask.js";
25
28
  export { createContext, deciderFor } from "./tools/context.js";
26
29
  export { CODEX_RULE, DOCTOR_CHECKS, runDoctor, which } from "./tools/doctor.js";
27
30
  export { runMany, summariseSkipped } from "./tools/many.js";
31
+ export { runOpportunitiesAdd, runOpportunitiesCheck, runOpportunitiesList, } from "./tools/opportunities.js";
28
32
  export { runRoute } from "./tools/route.js";
29
- export { AskInput, ManyInput, RouteInput, SpecCheckInput, TOOL_SCHEMAS, UsageInput, } from "./tools/schemas.js";
33
+ export { AskInput, ManyInput, OpportunitiesAddInput, OpportunitiesCheckInput, OpportunitiesListInput, RouteInput, SpecCheckInput, SpecLintInput, TOOL_SCHEMAS, UsageInput, } from "./tools/schemas.js";
30
34
  export { runSpecCheck } from "./tools/spec-check.js";
35
+ export { runSpecLint } from "./tools/spec-lint.js";
31
36
  export { runUsage } from "./tools/usage.js";
32
37
  export { createOpenRouterTransport, DEFAULT_TIMEOUT_MS, RETRY_STATUSES, } from "./transport/openrouter.js";
33
38
  export { CLI_PACKAGE, VERSION } from "./version.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAQ/D,OAAO,EACL,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,UAAU,EACV,cAAc,EACd,aAAa,GACd,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAElE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAEjF,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AACzE,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEnF,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE7E,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAC9F,OAAO,EACL,YAAY,EACZ,uBAAuB,EACvB,QAAQ,EACR,MAAM,EACN,OAAO,EACP,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,cAAc,GACf,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAE7F,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAE9E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAE1C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAE9F,OAAO,EACL,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,KAAK,GACN,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAElD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAG1F,OAAO,EAAE,mBAAmB,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE1E,OAAO,EACL,cAAc,EACd,eAAe,EACf,SAAS,EACT,QAAQ,EACR,gBAAgB,EAChB,SAAS,EACT,UAAU,EACV,QAAQ,GACT,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAEpD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAEvC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAE9D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAE/E,OAAO,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAE3D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAE3C,OAAO,EACL,QAAQ,EACR,SAAS,EACT,UAAU,EACV,cAAc,EACd,YAAY,EACZ,UAAU,GACX,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAEpD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAE3C,OAAO,EACL,yBAAyB,EACzB,kBAAkB,EAClB,cAAc,GACf,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEnD,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,QAAQ,GACT,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { Type } from "typebox";
2
+ /**
3
+ * A question, as it goes on the wire. Spelled out here (rather than an opaque
4
+ * record) so `decide schema <tool>` describes what a valid question is.
5
+ */
6
+ export declare const QuestionSchema: Type.TUnion<[Type.TObject<{
7
+ type: Type.TLiteral<"noul">;
8
+ instructions: Type.TString;
9
+ /** Optional `true`/`false` criteria that sharpen an ambiguous statement. */
10
+ criteria: Type.TOptional<Type.TRecord<"^.*$", Type.TString>>;
11
+ }>, Type.TObject<{
12
+ type: Type.TLiteral<"choice">;
13
+ instructions: Type.TString;
14
+ /** Option key to when it applies. At least two, including a way out. */
15
+ criteria: Type.TRecord<"^.*$", Type.TString>;
16
+ }>, Type.TObject<{
17
+ type: Type.TLiteral<"score">;
18
+ instructions: Type.TString;
19
+ /** Levels, lowest first and 0-indexed. */
20
+ criteria: Type.TArray<Type.TString>;
21
+ }>]>;
22
+ //# sourceMappingURL=schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/model/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAE9B;;;GAGG;AACH,eAAO,MAAM,cAAc;;;IAKrB,4EAA4E;;;;;IAS5E,wEAAwE;;;;;IASxE,0CAA0C;;IAK9C,CAAA"}
@@ -0,0 +1,26 @@
1
+ import { Type } from "typebox";
2
+ /**
3
+ * A question, as it goes on the wire. Spelled out here (rather than an opaque
4
+ * record) so `decide schema <tool>` describes what a valid question is.
5
+ */
6
+ export const QuestionSchema = Type.Union([
7
+ Type.Object({
8
+ type: Type.Literal("noul"),
9
+ instructions: Type.String({ minLength: 1 }),
10
+ /** Optional `true`/`false` criteria that sharpen an ambiguous statement. */
11
+ criteria: Type.Optional(Type.Record(Type.String(), Type.String())),
12
+ }, { additionalProperties: false }),
13
+ Type.Object({
14
+ type: Type.Literal("choice"),
15
+ instructions: Type.String({ minLength: 1 }),
16
+ /** Option key to when it applies. At least two, including a way out. */
17
+ criteria: Type.Record(Type.String(), Type.String(), { minProperties: 2 }),
18
+ }, { additionalProperties: false }),
19
+ Type.Object({
20
+ type: Type.Literal("score"),
21
+ instructions: Type.String({ minLength: 1 }),
22
+ /** Levels, lowest first and 0-indexed. */
23
+ criteria: Type.Array(Type.String(), { minItems: 2 }),
24
+ }, { additionalProperties: false }),
25
+ ]);
26
+ //# sourceMappingURL=schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/model/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAE9B;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC;IACvC,IAAI,CAAC,MAAM,CACT;QACE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QAC1B,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;QAC3C,4EAA4E;QAC5E,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;KACnE,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC;IACD,IAAI,CAAC,MAAM,CACT;QACE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;QAC5B,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;QAC3C,wEAAwE;QACxE,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,CAAC;KAC1E,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC;IACD,IAAI,CAAC,MAAM,CACT;QACE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;QAC3B,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;QAC3C,0CAA0C;QAC1C,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;KACrD,EACD,EAAE,oBAAoB,EAAE,KAAK,EAAE,CAChC;CACF,CAAC,CAAA"}
@@ -0,0 +1,280 @@
1
+ import { type Static, Type } from "typebox";
2
+ import { type Op } from "../project/project.js";
3
+ /**
4
+ * The scout backlog: places where an LLM call, a hand-written heuristic or an
5
+ * agent fan-out is doing a decision model's job. The `scout` skill decides what
6
+ * counts; this module validates and persists it, so the backlog is a typed
7
+ * artifact rather than prose in a transcript. Every saving in it is projected
8
+ * (arithmetic over the inputs shown beside it), never measured.
9
+ */
10
+ export declare const BACKLOG_FORMAT = 1;
11
+ export declare const CandidateSchema: Type.TObject<{
12
+ /** `code`: a codebase (Mode A). `agents`: skills, hooks, agent configuration (Mode B). */
13
+ mode: Type.TUnion<[Type.TLiteral<"code">, Type.TLiteral<"agents">]>;
14
+ location: Type.TObject<{
15
+ path: Type.TString;
16
+ lines: Type.TOptional<Type.TObject<{
17
+ start: Type.TInteger;
18
+ end: Type.TInteger;
19
+ }>>;
20
+ }>;
21
+ /** What does the job today, e.g. "gpt-4o call parsed to an enum". */
22
+ mechanism: Type.TString;
23
+ shape: Type.TUnion<[Type.TLiteral<"single">, Type.TLiteral<"fanout">, Type.TLiteral<"cascade">, Type.TLiteral<"pairwise">]>;
24
+ /**
25
+ * The text that triggered it, taken verbatim from the screened item. The id is
26
+ * derived from it, so it must be copied, not paraphrased.
27
+ */
28
+ evidence: Type.TString;
29
+ /** A draft question set that would replace the mechanism. */
30
+ questions: Type.TRecord<"^.*$", Type.TUnion<[Type.TObject<{
31
+ type: Type.TLiteral<"noul">;
32
+ instructions: Type.TString;
33
+ criteria: Type.TOptional<Type.TRecord<"^.*$", Type.TString>>;
34
+ }>, Type.TObject<{
35
+ type: Type.TLiteral<"choice">;
36
+ instructions: Type.TString;
37
+ criteria: Type.TRecord<"^.*$", Type.TString>;
38
+ }>, Type.TObject<{
39
+ type: Type.TLiteral<"score">;
40
+ instructions: Type.TString;
41
+ criteria: Type.TArray<Type.TString>;
42
+ }>]>>;
43
+ /**
44
+ * What replacing the mechanism would mainly buy. `cost`: cheaper calls.
45
+ * `quality`: better or more consistent verdicts (a regex or heuristic that
46
+ * costs nothing today, so its `savingUsd` can be negative). `latency`:
47
+ * faster answers. Rank within a benefit, not across them.
48
+ */
49
+ benefit: Type.TUnion<[Type.TLiteral<"cost">, Type.TLiteral<"quality">, Type.TLiteral<"latency">]>;
50
+ /** The inputs of the projected saving. The saving itself is computed here. */
51
+ projected: Type.TObject<{
52
+ volume: Type.TNumber;
53
+ /** What `volume` counts per, e.g. "day", "PR", "run". */
54
+ per: Type.TString;
55
+ currentCostPerItemUsd: Type.TNumber;
56
+ decisionCostPerItemUsd: Type.TNumber;
57
+ /** Where the figures came from. */
58
+ note: Type.TOptional<Type.TString>;
59
+ }>;
60
+ risk: Type.TObject<{
61
+ level: Type.TUnion<[Type.TLiteral<"low">, Type.TLiteral<"medium">, Type.TLiteral<"high">]>;
62
+ /** What would go wrong if the replacement erred. */
63
+ note: Type.TString;
64
+ }>;
65
+ /** The next step, e.g. "save the spec with design, then adopt". */
66
+ next: Type.TString;
67
+ /** Defaults to `new`. `rejected` needs a `statusReason`. */
68
+ status: Type.TOptional<Type.TUnion<[Type.TLiteral<"new">, Type.TLiteral<"stale">, Type.TLiteral<"adopted">, Type.TLiteral<"rejected">]>>;
69
+ statusReason: Type.TOptional<Type.TString>;
70
+ /** Which sweep produced it, and whether its screening answers were live or replayed. */
71
+ source: Type.TObject<{
72
+ sweep: Type.TString;
73
+ answers: Type.TUnion<[Type.TLiteral<"live">, Type.TLiteral<"replay">]>;
74
+ }>;
75
+ }>;
76
+ export declare const OpportunitySchema: Type.TObject<{
77
+ /** `code`: a codebase (Mode A). `agents`: skills, hooks, agent configuration (Mode B). */
78
+ mode: Type.TUnion<[Type.TLiteral<"code">, Type.TLiteral<"agents">]>;
79
+ location: Type.TObject<{
80
+ path: Type.TString;
81
+ lines: Type.TOptional<Type.TObject<{
82
+ start: Type.TInteger;
83
+ end: Type.TInteger;
84
+ }>>;
85
+ }>;
86
+ /** What does the job today, e.g. "gpt-4o call parsed to an enum". */
87
+ mechanism: Type.TString;
88
+ shape: Type.TUnion<[Type.TLiteral<"single">, Type.TLiteral<"fanout">, Type.TLiteral<"cascade">, Type.TLiteral<"pairwise">]>;
89
+ /**
90
+ * The text that triggered it, taken verbatim from the screened item. The id is
91
+ * derived from it, so it must be copied, not paraphrased.
92
+ */
93
+ evidence: Type.TString;
94
+ /** A draft question set that would replace the mechanism. */
95
+ questions: Type.TRecord<"^.*$", Type.TUnion<[Type.TObject<{
96
+ type: Type.TLiteral<"noul">;
97
+ instructions: Type.TString;
98
+ criteria: Type.TOptional<Type.TRecord<"^.*$", Type.TString>>;
99
+ }>, Type.TObject<{
100
+ type: Type.TLiteral<"choice">;
101
+ instructions: Type.TString;
102
+ criteria: Type.TRecord<"^.*$", Type.TString>;
103
+ }>, Type.TObject<{
104
+ type: Type.TLiteral<"score">;
105
+ instructions: Type.TString;
106
+ criteria: Type.TArray<Type.TString>;
107
+ }>]>>;
108
+ /**
109
+ * What replacing the mechanism would mainly buy. `cost`: cheaper calls.
110
+ * `quality`: better or more consistent verdicts (a regex or heuristic that
111
+ * costs nothing today, so its `savingUsd` can be negative). `latency`:
112
+ * faster answers. Rank within a benefit, not across them.
113
+ */
114
+ benefit: Type.TUnion<[Type.TLiteral<"cost">, Type.TLiteral<"quality">, Type.TLiteral<"latency">]>;
115
+ risk: Type.TObject<{
116
+ level: Type.TUnion<[Type.TLiteral<"low">, Type.TLiteral<"medium">, Type.TLiteral<"high">]>;
117
+ /** What would go wrong if the replacement erred. */
118
+ note: Type.TString;
119
+ }>;
120
+ /** The next step, e.g. "save the spec with design, then adopt". */
121
+ next: Type.TString;
122
+ statusReason: Type.TOptional<Type.TString>;
123
+ /** Which sweep produced it, and whether its screening answers were live or replayed. */
124
+ source: Type.TObject<{
125
+ sweep: Type.TString;
126
+ answers: Type.TUnion<[Type.TLiteral<"live">, Type.TLiteral<"replay">]>;
127
+ }>;
128
+ id: Type.TString;
129
+ status: Type.TUnion<[Type.TLiteral<"new">, Type.TLiteral<"stale">, Type.TLiteral<"adopted">, Type.TLiteral<"rejected">]>;
130
+ projected: Type.TObject<{
131
+ volume: Type.TNumber;
132
+ /** What `volume` counts per, e.g. "day", "PR", "run". */
133
+ per: Type.TString;
134
+ currentCostPerItemUsd: Type.TNumber;
135
+ decisionCostPerItemUsd: Type.TNumber;
136
+ /** Where the figures came from. */
137
+ note: Type.TOptional<Type.TString>;
138
+ basis: Type.TLiteral<"projected">;
139
+ /** volume × (current − decision), per `per`. Negative means it would cost more. */
140
+ savingUsd: Type.TNumber;
141
+ }>;
142
+ firstSeenAt: Type.TString;
143
+ seenAt: Type.TString;
144
+ }>;
145
+ export declare const BacklogSchema: Type.TObject<{
146
+ version: Type.TLiteral<1>;
147
+ opportunities: Type.TArray<Type.TObject<{
148
+ /** `code`: a codebase (Mode A). `agents`: skills, hooks, agent configuration (Mode B). */
149
+ mode: Type.TUnion<[Type.TLiteral<"code">, Type.TLiteral<"agents">]>;
150
+ location: Type.TObject<{
151
+ path: Type.TString;
152
+ lines: Type.TOptional<Type.TObject<{
153
+ start: Type.TInteger;
154
+ end: Type.TInteger;
155
+ }>>;
156
+ }>;
157
+ /** What does the job today, e.g. "gpt-4o call parsed to an enum". */
158
+ mechanism: Type.TString;
159
+ shape: Type.TUnion<[Type.TLiteral<"single">, Type.TLiteral<"fanout">, Type.TLiteral<"cascade">, Type.TLiteral<"pairwise">]>;
160
+ /**
161
+ * The text that triggered it, taken verbatim from the screened item. The id is
162
+ * derived from it, so it must be copied, not paraphrased.
163
+ */
164
+ evidence: Type.TString;
165
+ /** A draft question set that would replace the mechanism. */
166
+ questions: Type.TRecord<"^.*$", Type.TUnion<[Type.TObject<{
167
+ type: Type.TLiteral<"noul">;
168
+ instructions: Type.TString;
169
+ criteria: Type.TOptional<Type.TRecord<"^.*$", Type.TString>>;
170
+ }>, Type.TObject<{
171
+ type: Type.TLiteral<"choice">;
172
+ instructions: Type.TString;
173
+ criteria: Type.TRecord<"^.*$", Type.TString>;
174
+ }>, Type.TObject<{
175
+ type: Type.TLiteral<"score">;
176
+ instructions: Type.TString;
177
+ criteria: Type.TArray<Type.TString>;
178
+ }>]>>;
179
+ /**
180
+ * What replacing the mechanism would mainly buy. `cost`: cheaper calls.
181
+ * `quality`: better or more consistent verdicts (a regex or heuristic that
182
+ * costs nothing today, so its `savingUsd` can be negative). `latency`:
183
+ * faster answers. Rank within a benefit, not across them.
184
+ */
185
+ benefit: Type.TUnion<[Type.TLiteral<"cost">, Type.TLiteral<"quality">, Type.TLiteral<"latency">]>;
186
+ risk: Type.TObject<{
187
+ level: Type.TUnion<[Type.TLiteral<"low">, Type.TLiteral<"medium">, Type.TLiteral<"high">]>;
188
+ /** What would go wrong if the replacement erred. */
189
+ note: Type.TString;
190
+ }>;
191
+ /** The next step, e.g. "save the spec with design, then adopt". */
192
+ next: Type.TString;
193
+ statusReason: Type.TOptional<Type.TString>;
194
+ /** Which sweep produced it, and whether its screening answers were live or replayed. */
195
+ source: Type.TObject<{
196
+ sweep: Type.TString;
197
+ answers: Type.TUnion<[Type.TLiteral<"live">, Type.TLiteral<"replay">]>;
198
+ }>;
199
+ id: Type.TString;
200
+ status: Type.TUnion<[Type.TLiteral<"new">, Type.TLiteral<"stale">, Type.TLiteral<"adopted">, Type.TLiteral<"rejected">]>;
201
+ projected: Type.TObject<{
202
+ volume: Type.TNumber;
203
+ /** What `volume` counts per, e.g. "day", "PR", "run". */
204
+ per: Type.TString;
205
+ currentCostPerItemUsd: Type.TNumber;
206
+ decisionCostPerItemUsd: Type.TNumber;
207
+ /** Where the figures came from. */
208
+ note: Type.TOptional<Type.TString>;
209
+ basis: Type.TLiteral<"projected">;
210
+ /** volume × (current − decision), per `per`. Negative means it would cost more. */
211
+ savingUsd: Type.TNumber;
212
+ }>;
213
+ firstSeenAt: Type.TString;
214
+ seenAt: Type.TString;
215
+ }>>;
216
+ }>;
217
+ export type Candidate = Static<typeof CandidateSchema>;
218
+ export type Opportunity = Static<typeof OpportunitySchema>;
219
+ export type Backlog = Static<typeof BacklogSchema>;
220
+ export type OpportunityStatus = Opportunity["status"];
221
+ export declare function backlogPath(repoRoot: string): string;
222
+ /**
223
+ * Stable across re-runs and file moves: the mode and the evidence, with
224
+ * whitespace collapsed. Not the path (a moved file keeps its id) and nothing
225
+ * the agent paraphrases.
226
+ */
227
+ export declare function opportunityId(mode: Candidate["mode"], evidence: string): string;
228
+ export declare function projectedSaving(p: Candidate["projected"]): number;
229
+ /** Every problem with a backlog value, as `path message` lines. Empty when valid. */
230
+ export declare function backlogProblems(value: unknown): string[];
231
+ /**
232
+ * Read the backlog. A missing file is an empty backlog; a malformed one is an
233
+ * error, and is never repaired or overwritten.
234
+ */
235
+ export declare function readBacklog(file: string): Backlog;
236
+ /**
237
+ * Run `body` holding the backlog's lock, so concurrent `add`s (two sweeps, or
238
+ * a sweep run in parallel) serialise instead of losing each other's entries.
239
+ * A lock older than 30 s is from a crashed run and is taken over.
240
+ */
241
+ export declare function withBacklogLock<T>(file: string, body: () => T): T;
242
+ /** Written whole, through a temp file, so a crash never leaves half a backlog. */
243
+ export declare function writeBacklog(file: string, backlog: Backlog): void;
244
+ export interface MergeResult {
245
+ backlog: Backlog;
246
+ added: string[];
247
+ updated: string[];
248
+ /** Entries at a path this add covered, not seen again, and so superseded. */
249
+ staled: string[];
250
+ }
251
+ /**
252
+ * Merge candidates into a backlog.
253
+ *
254
+ * - A candidate whose id exists updates that entry (location, draft, figures,
255
+ * `seenAt`), keeping `firstSeenAt`. Its status changes only when the
256
+ * candidate gives one, so a rejection survives a re-sweep.
257
+ * - A new id is added with status `new` unless the candidate says otherwise.
258
+ * - A `new` entry that this add's sweep produced before, at a path the add
259
+ * covers, in the same mode, and that the add didn't see again is marked
260
+ * `stale`: its evidence changed. It is never deleted. A stale entry seen again
261
+ * is `new` again.
262
+ */
263
+ export declare function mergeCandidates(backlog: Backlog, candidates: readonly Candidate[], now: string): MergeResult;
264
+ /** Top-level fields of an entry, for `--fields`. */
265
+ export declare const ENTRY_FIELDS: readonly string[];
266
+ export interface RecordFilter {
267
+ field: string;
268
+ op: Op;
269
+ value: number | string | string[];
270
+ source: string;
271
+ }
272
+ /** `status=new`, `risk in medium,high`, `projected>=0.5`, `location.path=src/a.ts`. */
273
+ export declare function parseRecordFilter(text: string): RecordFilter;
274
+ export declare function parseRecordSort(text: string): {
275
+ field: string;
276
+ direction: "asc" | "desc";
277
+ };
278
+ export declare function readField(o: Opportunity, field: string): unknown;
279
+ export declare function recordMatches(o: Opportunity, f: RecordFilter): boolean;
280
+ //# sourceMappingURL=backlog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backlog.d.ts","sourceRoot":"","sources":["../../src/opportunities/backlog.ts"],"names":[],"mappings":"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"}